rinterpret_cast与大小端问题

来看以下这段代码:


int main() { 
	char a[2];
	a[0] = 1;
	a[1] = 0;
	std::cout << *reinterpret_cast<unsigned short*>(a);
} 

在Windows系统(x86)下的输出会是什么?
256?那就错了,因为Windows使用的内存字节序是小端(Little-Endian)模式,低位存放在低地址,高位存放在高地址,如图:

对应题中那个unsigned short变量,低位为(a + 0),而高位为(a + 1),所以结果是1。
而MAC系统(PowerPC)的输出就是1,它采用的大端(Big-Endian)模式如图:

可以说小端模式更符合自然顺序,而大端模式更符合我们人从左往右从高位往低位读写的顺序,而网络字节序采用的也是大端模式。

使用了reinterpret_cast的项目(当然还有强制的指针类型转换),在不同平台的移植性上一定要多加注意!

你可能感兴趣的:(cast)