显然似乎Ideone和Codepad都使用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*
,那么它确实取决于字节序,但是你尝试重新解释数组或任何其他类型的情况是什么?
答案 0 :(得分:2)
Endian是CPU的一个功能,而不是编译器...
假设您的short
类型为16位,而无符号字符为8位,那么a
的内存布局将为
0x00 0x01
在位端CPU上,这意味着*s
将 1 (0x0001)。在一个小端,CPU *s
将为256(0x0100)。
顺便说一句,找到大端的CPU并不是那么容易。 This page列出了过去几十年的CPU架构,并列出了每个架构的字节序。