最近看了有关CPU处理字节的大小端存储方式以及网络传输中相关字节端顺序的问题,想起曾经也在编程中遇到过此类问题,只是当时没有引起重视,在编程顺利的情况下也就想当然的过去了,因此有必要作以下总结。但是由于相关内容较多,思维也较混乱,一片文章恐怕很难全部说清楚。于是决定分篇讨论,下面几篇文章将重点记录下自己在有关大小端问题的理解以及自己所做的试验。
下面主要叙述两种不同的辨别cpu字节序的函数,由于程序比较简单,不再添加注释了。
#include <stdio.h>
bool isLittleEndian1(void)
{
int i = 1;
char j = *((char *)&i);
if (j==1)
{
return true;
}
else
{
return false;
}
}
bool isLittleEndian2(void)
{
union fourByte
{
int i;
char j;、
} a;
a.i = 1;
if (a.j==1)
{
return true;
}
else
{
return false;
}
}
int main(void)
{
if (isLittleEndian1() == true)
{
printf("Cpu is little endian!\n");
}
else
{
printf("Cpu is big endian\n");
}
if (isLittleEndian2() == true)
{
printf("Cpu is little endian!\n");
}
else
{
printf("Cpu is big endian!\n");
}
return 0;
}
第一种方法是通过将int强制类型转换成char来判断字节序,第二种方法是通过创建一个存储有int型和char型的4字节共同体来判断,本质上是一样的,只是实现手法不同而已。