如何在 C 语言程序中判断系统是大端序还是小端序?

· 约 2 分钟读完 · 第 135 / 143 章

推荐答案

本题详细解读

什么是大端序和小端序?

  • 大端序(Big Endian):数据的高字节存储在内存的低地址处,低字节存储在内存的高地址处。
  • 小端序(Little Endian):数据的低字节存储在内存的低地址处,高字节存储在内存的高地址处。

代码解析

  1. 定义一个整数变量 num 并赋值为 1:

    • 在内存中,整数 1 的二进制表示为 00000000 00000000 00000000 00000001(假设为32位系统)。
    • 在大端序系统中,内存布局为:00 00 00 01。
    • 在小端序系统中,内存布局为:01 00 00 00。
  2. 将 num 的地址强制转换为 char 指针:

    • (char *)&num 将 num 的地址转换为指向 char 类型的指针,这样可以通过该指针访问 num 的第一个字节。
  3. 判断第一个字节的值:

    • *(char *)&num 解引用该指针,获取 num 的第一个字节的值。
    • 如果第一个字节的值为 1,则说明系统是小端序;否则,系统是大端序。

总结

通过检查整数 1 在内存中的存储方式,可以轻松判断系统是大端序还是小端序。这种方法简单、直接,适用于大多数情况。