字节序的概念
字节序指多字节数据中各个字节在内存中的存储顺序,分为大端字节序和小端字节序两种。
大端字节序
高位字节存储在低地址中,低位字节存储在高地址中。如图:
小端字节序
高位字节存储在高地址中,低位字节存储在低地址中。如图:
判断大小端的第一种方法 ——指针
以数字1在内存中的存储为例。1为正数,原反补相同,如果是大端字节序,在内存中存储为
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01,如果是小端字节序,在内存中的存储为
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00.(32位机器)
通过观察可以发现,通过第一个的字节(红色部分)的值就可以判断出大小端。
请看代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int CheckSystem()
{
int i = 1;
char* ret = (char*)&i;
return *ret;
}
int main()
{
int ret = CheckSystem();
if (ret == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
判断大小端的第二种方法——联合体
联合体也叫共用体,请看下面例子:
union un
{
int i ;
char c;
};
以上例子中的char c 和 int i 共用一个字节。
请看代码:
#include <stdio.h>
int CheckSystem()
{
union un
{
int i;
char c;
}un;
un.i = 1;
return un.c;
}
int main()
{
int ret = CheckSystem();
if (ret == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
上述是在VS2019环境下测试。