CC++字节序(大端小端)判断

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CC++字节序(⼤端⼩端)判断
C/C++⼤端⼩端判断
说的是变量的⾼字节、低字节在内存地址中的排放顺序。

变量的⾼字节放到内存的低地址中(变量的低字节放到内存的⾼地址中)>⼤端
变量的⾼字节放到内存的⾼地址中(变量的低字节放到内存的低地址中)>⼩端
例如,对于int类型变量x=0x30313233,在x86下,考虑到在内存中是按照字节为单位进⾏数据排布,那么会把0x30,0x31,0x32,0x33这4个值按照某种顺序(⼤端或者⼩端)进⾏存储:从0x30到0x33依次为变量的⾼字节到低字节,如果是⼤端字节序存储,则从低内存地址到⾼内存地址,依次存放:0x30, 0x31, 0x32, 0x33;如果是⼩端字节序存储,则从低内存地址到⾼内存地址,依次存放:0x33, 0x32, 0x31,
0x30(⽤这⼏个蛋疼的16进制数字,是为了后续强转为char类型并打印的⽅便⽽考虑的):
写个代码验证下:
void test_little_or_big_endian() {
int x;
cout << "sizeof(int) is " << sizeof(int) << endl;
char x0, x1, x2, x3;
x = 0x30313233;
cout << *((char*)&x) << endl;
x0 = ((char*)&x)[0];
x1 = ((char*)&x)[1];
x2 = ((char*)&x)[2];
x3 = ((char*)&x)[3];
cout << "x0=" << x0 << endl;
cout << "x1=" << x1 << endl;
cout << "x2=" << x2 << endl;
cout << "x3=" << x3 << endl;
/*
对于⼩端序,输出
x0=3
x1=2
x2=1
x3=0 //0x30对应到⼗进制的48,也即是ascii的'0',作为char类型输出显⽰为0
*/
}。

相关文档
最新文档