如果我调试这个C代码:
unsigned int i = 0xFF;
如果它是一个小端系统,那么调试器会在内存0x00FF中显示我吗?如果它是一个大端系统,它会显示0xFF00吗?
答案 0 :(得分:2)
如果你在地址&i
附近查看内存的原始内容,那么是的,你就能分辨出来。但是大端的00 00 00 ff
和小端的ff 00 00 00
,假设sizeof(unsigned int)
为4而CHAR_BIT
(每个字节的位数)为8 - 你把它们换掉了。
您还可以通过以下几种技巧之一以编程方式检测字节顺序(即,您可以制作一个打印出其运行的体系结构的字节顺序的程序);例如,请参阅Detecting endianness programmatically in a C++ program(解决方案也适用于C)。
答案 1 :(得分:2)
如果:
char
s。unsigned int
s 如果它是小端,你会在&i
看到这个:
ff 00 ?? ?? ?? ?? ?? ??
这就是它的大端:
00 ff ?? ?? ?? ?? ?? ??
问号只代表内存中i
后面的字节。
请注意:
unsigned int
中的位数。这取决于实施。CHAR_BIT * sizeof (unsigned int)
。如果你的机器使用的是32位unsigned char
,你会看到:
ff 00 00 00 ?? ?? ?? ??
在little-endian案例中,在大端机器上你会看到:
00 00 00 ff ?? ?? ?? ??