一、引言
在计算机操作系统中,数据的存储方式可分为两种:大端系统与小端系统。不同数据存储系统意味着还原数据方式的不同,那么在拿到一个新系统做项目时如何确定系统的大小端问题呢?下面我们将用一个简单的C程序来实现
二、大小端定义
1. 小端系统
小端系统简单来说就是低 地址存储低位数据,高地址存储高位数据。如地址编号为1, 2, 3, 4;从低到高,一个地址编号可存储内容为一字节;有一个 4 字节数据0x01020304,该数据中的低位数据 04 存储在低位地址 1 中,以此存储,最后 01 存储在 4 中。
2.大端系统
大端系统简单来说就是低 地址存储高位数据,高地址存储低位数据。如地址编号为1, 2, 3, 4;从低到高,一个地址编号可存储内容为一字节;有一个 4 字节数据0x01020304,该数据中的低位数据 04 存储在高位地址 4 中,以此存储,最后 01 存储在 1 中。
三、C语言实现
本次代码实现运用了“联合(union)”的数据存储知识:对于“联合”里面的所有数据公用一份地址,如:
union data {
int num;
char ch;
};
该联合中 num 与 ch 公用一份地址,总字节为4字节,数据成员中最大字节数。而 字符 ch 默认储存位置在低地址中,那么我们只要将 ch 中的内容与 num 对比即可,如 ch 为 num 中的高位数据则“小存大”为大端系统;反之小端系统。
判断过程实现:
int main(int argc,const char* argv[]) {
union Data d;
d.num = 0x01020304; //16进制数,便于判断
if(d.ch == 0x04) { //低地址为 num 中的地位数据
printf("小端");
}
else { //低地址为 num 中的地位数据
printf("大端");
}
return 0;
}
三、结语
在我们需要按字节方式拿取数据时,了解目标系统是大端或者小端及其重要,此时我们便可以通过以上方式判断大小端。学会了此,老板再也不用担心我数据乱序啦。