前言
一般而言,广义内存最小单位按照字节来计算。如果出现了多字节的数据,比如短整型,长整形等,他们在内存中的排列是如何的呢?目前架构上主要有两种, 分别是小端(little-endian)和大端(big-endian)。
小端字节序和大端字节序
- 小端字节序:
低序字节存储在起始地址 - 大端字节序:
高序字节存储在起始地址
确认主机大小端的方法
- 采用联合方式
#include "unp.h"
int
main(int argc, char **argv)
{
union {
short s;
char c[sizeof(short)];
} un;
un.s = 0x0102;
printf("%s: ", CPU_VENDOR_OS);
if (sizeof(short) == 2) {
if (un.c[0] == 1 && un.c[1] == 2)
printf("big-endian\n");
else if (un.c[0] == 2 && un.c[1] == 1)
printf("little-endian\n");
else
printf("unknown\n");
} else
printf("sizeof(short) = %d\n", sizeof(short));
exit(0);
}
- 整型拆分
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i = 0x12345678;
// printf("%02x %02x %02x %02x\n", *(char*)&i, *((char*)&i+1), *((char*)&i+2), *((char*)&i+3));
if(0x78 == *(char*)&i)
{
printf("i=0x%08x, 低地址存储数为%02x, 所以是little-endian\n", i, *(char*)&i);
}else if(0x12 == *(char*)&i)
{
printf("big-endian\n");
}
return 0;
}
- 使用系统工具

本文介绍了计算机内存中多字节数据存储的两种主要方式——小端字节序和大端字节序,并提供了通过编程确认主机字节序的方法,包括使用联合类型和整型拆分的方式。通过这些方法,读者可以了解并检测自己的系统是采用小端还是大端字节序。
775

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



