Little-Endian Big-Endian
什么是Big?什么是Little?要理解这个问题,必须要知道数据在机器中存储的规则.....
一句话解释:Little-Endian表示一个数的低位存放在低位地址
所谓的Little-Endian,就是我们在学习汇编时候的高高低低原则,而Bit-Endian就是刚刚相反,例如:0x12345678h这个数据,在不同机器中存储是不同的
Big-Endian Little-Endian
0字节 12h 78h
1字节 34h 56h
2字节 56h 34h
3字节 78h 12h
Little-Endian主要用在我们现在的PC的CPU中,Big-Endian则应用在目前的Mac机器中(注意:是指Power系列 处理器)
那么如何用C语言动态的得到CPU的字节序呢?
下面给出一个程序:
#include
static union
{
char c[4];
unsigned char l;//c[4]和l共有一个四字节的内存空间
} endian_test={ {'l','?','?','b'} };
#define ENDIANNESS ( (char)endian_test.l )
int main()
{
if (ENDIANNESS == 'l')//低地址存低字节就是little endian
printf("little endian\n");
else
printf("big endian\n");
}
或者更简单的:
bool isPlatformLittleEndian()
{
int n = 1;
return *((char*)&n) ? true : false;
}
第一段程序的理论依据是:union类型以其中size最大的为其大小,并且union的存放顺序是所有成员都是从低地址开始存放。
测试一下就知道,X86系列架构的CPU都是Little-Endian的
PS:关于Endian这个词语,我在网上看到其意思和起源
以下内容来自Pconline:
“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。
我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”。
阅读(4461) | 评论(0) | 转发(0) |