快速判断大端小端字节序
什么是大小端?
大小端(Endianness)是指计算机存储多字节数据时,字节的顺序。主要有两种类型:
1. 大端字节序(Big-endian)
- 定义:最高有效字节(最左边的字节)存储在最低的内存地址,最低有效字节(最右边的字节)存储在最高的内存地址。
- 示例:对于整数
0x12345678
,内存布局为:内存地址 | 值 ----------------- 0x00 | 0x12 0x01 | 0x34 0x02 | 0x56 0x03 | 0x78
2. 小端字节序(Little-endian)
- 定义:最低有效字节存储在最低的内存地址,最高有效字节存储在最高的内存地址。
- 示例:对于整数
0x12345678
,内存布局为:
内存地址 | 值
-----------------
0x00 | 0x78
0x01 | 0x56
0x02 | 0x34
0x03 | 0x12
代码实现判断
1、整数定义:将 x 定义为 0x12345678
2、指针转换:将 x 的地址转换为 char* 类型,以便逐字节检查内存。
3、字节判断:通过检查 c[0]:
- 如果 c[0] 为 0x78,说明是小端字节序。
- 如果 c[0] 不为 0x78,说明是大端字节序。
#include <iostream>
using namespace std;
int main()
{
unsigned int x = 0x12345678; // 定义一个整数
char *c = (char *)(&x); // 将指针转换为字符指针
if (c[0] == 0x78)
{
cout << "Little-endian" << endl; // 最低有效字节在最前面
}
else
{
cout << "Big-endian" << endl; // 最低有效字节在最后面
}
return 0;
}