内存高地址:地址越大
内存低地址:地址越小
数据高低字节:左高右低
小端模式:高地址存高字节
大端模式:高地址存低字节
例如:存储0x1234这个数
int i=oX0000 0111; //等价于0000 0000 0000 0000 0000 0001 0001 0001,等价于int i=273
大小端判断代码
int main(){ int value=0x00000101; char *p=(char *)&value; //转化为char型指针,会截取value指针的首字节存进p中 if(*p==0x01){ cout<<"small"<<endl; }else{ cout<<"big"<<endl; } return 0; }
char a[2]={0X01,0X11}; //char型1字节,共8bit,16进制需要用2位表示。
int i=0X1111 0001; //int4字节,共32bit,需要用8位16进制表示。
1、&表示按位与操作。
2、&&表示逻辑与的意思,即为and。
区别二:程序执行的时候不同
1、当运算符&&两边的表达式的结果都为true时,整个运算结果才为true
2、我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。
或者Oxff截取int型最低字节。
int main(){ int f=0x00110011; printf("%x",f&0xff); //ox11 printf("%x",f>>8&0xff); //ox00 printf("%x",f>>16&0xff); //ox11 return 0; }
case练习:uint32_t型编码为4字节的char型
void EncodeFixed32(char* buf, uint32_t value) { buf[0] = value & 0xff; buf[1] = (value >> 8) & 0xff; buf[2] = (value >> 16) & 0xff; buf[3] = (value >> 24) & 0xff; } int main(){ char c[4]; EncodeFixed32(c,285217041); //285217041等价于0x11001111 printf("c[0]: %x",c[0]); //c[0]: 11 cout<<endl; printf("c[1]: %x",c[1]); //c[1]: 11 cout<<endl; printf("c[2]: %x",c[2]); //c[2]: 0 cout<<endl; printf("c[3]: %x",c[3]); //c[3]: 11 return 0; }
//最终c数组内:11110011,正好与输入的整数字节位相反,适合大端机的转换。
原文:https://www.cnblogs.com/liuweiweitju/p/14720368.html