C/C++大端小端判断

本文通过代码示例详细解释了C/C++中如何判断系统采用的大端还是小端存储方式。通过创建一个整型变量并将其赋值,然后逐个读取其字节来确定字节序。在小端系统中,低字节存储在低地址,高字节存储在高地址;而在大端系统中则相反。提供的代码在小端系统上运行,会输出从高位到低位的字节值。
摘要由CSDN通过智能技术生成

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
    */
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值