大端的以下代码会产生什么结果?

时间:2014-01-18 11:40:49

标签: c++ windows casting endianness

显然似乎IdeoneCodepad都使用Little endian来编译和运行他们的代码。

例如,如果我想在Big endian CPU上测试以下内容,那么我很想知道将unsigned char[]数组转换为unsigned short*是否真的改变了它的输出?

#include <iostream>

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

据我所知,如果你将int强制转换为char*,那么它确实取决于字节序,但是你尝试重新解释数组或任何其他类型的情况是什么?

http://ideone.com/4UP0J0

1 个答案:

答案 0 :(得分:2)

Endian是CPU的一个功能,而不是编译器...

假设您的short类型为16位,而无符号字符为8位,那么a的内存布局将为

0x00 0x01

在位端CPU上,这意味着*s 1 (0x0001)。在一个小端,CPU *s将为256(0x0100)。

顺便说一句,找到大端的CPU并不是那么容易。 This page列出了过去几十年的CPU架构,并列出了每个架构的字节序。