如果我调试这个 C 代码:
unsigned int i = 0xFF;
如果是小端系统,调试器是否会在内存中显示 0x00FF,如果是大端系统,是否会在内存中显示 0xFF00?
如果:
char
s。unsigned int
您的系统使用 16 位&i
如果它是 little-endian ,你会看到这个:
ff 00 ?? ?? ?? ?? ?? ??
如果它是大端的:
00 ff ?? ?? ?? ?? ?? ??
问号仅代表i
内存中的字节。
注意:
unsigned int
. 这取决于实施。CHAR_BIT * sizeof (unsigned int)
.如果您的机器使用 32-bit unsigned char
,您会看到:
ff 00 00 00 ?? ?? ?? ??
在小端的情况下,在大端的机器上你会看到:
00 00 00 ff ?? ?? ?? ??
如果您查看地址周围的原始内存内容,&i
那么是的,您将能够分辨出差异。但这将00 00 00 ff
适用于大端和ff 00 00 00
小端,假设sizeof(unsigned int)
是 4 并且CHAR_BIT
(每字节的位数)是 8——在问题中你已经交换了它们。
您还可以通过以下几种技巧之一以编程方式检测字节顺序(即您可以制作一个打印出其运行架构的字节顺序的程序);例如,请参阅在 C++ 程序中以编程方式检测字节顺序(解决方案也适用于 C)。