可能重复:
Detecting endianness programmatically in a C++ program
我正在尝试检查我是否运行了一个小端或大端的操作系统。
int main()
{
int i = 1;
unsigned char b = i;
char *c = reinterpret_cast<char*>(&i); // line 5
cout << "Processor identified as: " << endl;
if (*c == b)
cout << "Little endian" << endl;
else
cout << "Big endian" << endl;
}
我不确定在第5行中投射int*
到char*
指针是否保证返回最低地址。我做得对吗?
答案 0 :(得分:0)
它可能会给你调用堆栈的底部地址(主线程)。
但堆地址可能会比较低(或更高)地址。
此外,堆栈增长方向与endianess正交。
答案 1 :(得分:0)
C ++标准对整数的字节内容没有任何限制。您可能会发现一些既不是小端也不是大端的系统 - 例如,PDP-11使用的格式0x0A0B0C0D
存储为0B 0A 0D 0C
。还允许在0x01
的表示中根本没有任何1
个字节。
至于演员是否会返回int中的最低字节,它会。但是,C ++规范还没有很好地定义该字节的内容。
答案 2 :(得分:0)
您的char将具有与int相同的地址,这将是int中任何字节的最低地址。不知道这是否真的得到了保证,但在我曾经使用的每个系统上都是如此。