字节序的概念
字节序指多字节数据中各个字节在内存中的存储顺序,分为大端字节序和小端字节序两种。
大端字节序
高位字节存储在低地址中,低位字节存储在高地址中。如图:

小端字节序
高位字节存储在高地址中,低位字节存储在低地址中。如图:

判断大小端的第一种方法 ——指针
以数字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环境下测试。
本文介绍了字节序的概念,区分了大端字节序和小端字节序,通过指针和联合体示例展示了在C语言中判断系统字节序的方法。
6149

被折叠的 条评论
为什么被折叠?



