Big-Endian和Little-Endian的定义如下:
- Big-Endian(大端模式)就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
- Little-Endian(小端模式)就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
举一个例子,比如数字0x12 34 56 78
在内存中的表示形式为:
-
大端模式:
低地址 -----------------> 高地址 0x12 | 0x34 | 0x56 | 0x78
-
小端模式:
低地址 ------------------> 高地址 0x78 | 0x56 | 0x34 | 0x12
- 可见,大端模式和字符串的存储模式类似。
- 每两个16进制数表示一个字节。
区分大小端机器了,代码如下:
#include <stdio.h>
int main()
{
int data = 1;
char* p = (char*)&data;
if(*p == 1)
{
printf("小端机器\n");
}
else if(*p == 0)
{
printf("大端机器\n");
}
return 0;
}
或者union验证
bool IsBigEndian(){
union NUM{
int a;
char b;
}num;
num.a = 0x1234;
if( num.b == 0x12 ){
printf("大端机器\n");
return true;
}
printf("小端机器\n");
return false;
}