0

如果我调试这个 C 代码:

unsigned int i = 0xFF;

如果是小端系统,调试器是否会在内存中显示 0x00FF,如果是大端系统,是否会在内存中显示 0xFF00?

4

2 回答 2

2

如果:

  • 您的系统有 8 位chars。
  • unsigned int您的系统使用 16 位
  • 您的调试器将内存显示为简单的十六进制字节

&i如果它是 little-endian ,你会看到这个:

ff 00 ?? ?? ?? ?? ?? ??

如果它是大端的:

00 ff ?? ?? ?? ?? ?? ??

问号仅代表i内存中的字节。

注意:

  • little-endian 机器会将具有最低值的字节存储在最低地址。
  • 大端机器将在最低地址存储具有最大值的字节。
  • C 没有指定unsigned int. 这取决于实施。
  • 您可以使用CHAR_BIT * sizeof (unsigned int).

如果您的机器使用 32-bit unsigned char,您会看到:

ff 00 00 00 ?? ?? ?? ??

在小端的情况下,在大端的机器上你会看到:

00 00 00 ff ?? ?? ?? ??
于 2012-05-04T09:52:47.167 回答
2

如果您查看地址周围的原始内存内容,&i那么是的,您将能够分辨出差异。但这将00 00 00 ff适用于大端和ff 00 00 00小端,假设sizeof(unsigned int)是 4 并且CHAR_BIT(每字节的位数)是 8——在问题中你已经交换了它们。

您还可以通过以下几种技巧之一以编程方式检测字节顺序(即您可以制作一个打印出其运行架构的字节顺序的程序);例如,请参阅在 C++ 程序中以编程方式检测字节顺序(解决方案也适用于 C)。

于 2012-05-04T09:50:14.510 回答