1. $ lscpu
2. $ echo -n I | od -to2 | awk 'FNR==1{ print substr($2,6,1)}'
0 -- On a Big Endian system (Solaris, SPARC)
1 -- On a Little Endian system (Linux, Intel)
3. $ python test_endian
$ cat test_endian
#!/usr/bin/env python
from struct import pack
if pack('@h', 1) == pack('
print "Little Endian"
else:
print "Big Endian"
4. $ gcc -o endian c_endian.c
# cat c_endian.c
#include
int main(void)
{
union w
{
int a;
char b;
} c;
c.a=1;
printf("check: Big Endian 0 ; Little Endian 1 ; result:%d\n",(c.b==1));
return 0;
}
一般来说,大部分用户的操作系统(如windows, FreeBsd, Linux)是Little Endian的。
少部分,如MAC OS ,是Big Endian 的。
DEC (Digital Equipment Corporation,现在是Compaq公司的一部分)和Intel的机器(X86平台)一般采用小端。
IBM, Motorola(Power PC), Sun的机器一般采用大端。
当然,这不代表所有情况。有的CPU即能工作于小端, 又能工作于大端, 比如ARM, Alpha,摩托罗拉的PowerPC。 具体情形参考处理器手册。
具体这类CPU是大端还是小端,应该和具体设置有关。
(如,Power PC支持little-endian字节序,但在默认配置时是big-endian字节序)
不同的CPU上运行不同的操作系统,字节序也是不同的,参见下表。
处理器 操作系统 字节排序
Alpha 全部 Little endian
HP-PA NT Little endian
HP-PA UNIX Big endian
Intelx86 全部 Little endian <-----x86系统是小端字节序系统
Motorola680x() 全部 Big endian
MIPS NT Little endian
MIPS UNIX Big endian
PowerPC NT Little endian
PowerPC 非NT Big endian <-----PPC系统是大端字节序系统
RS/6000 UNIX Big endian
SPARC UNIX Big endian
IXP1200 ARM核心 全部 Little endian
大小端的说法源自《格列佛游记》。我们知道,鸡蛋通常一端大一端小,小人国的人们对于剥蛋壳时应从哪一端开始剥起有着不一样的看法。同样,计算机界对于传输多字节字(由多个字节来共同表示一个数据类型)时,是先传高位字节(大端)还是先传低位字节(小端)也有着不一样的看法,这就是计算机里头大小端模式的由来了。无论是写文件还是网络传输,实际上都是往流设备进行写操作的过程,而且这个写操作是从流的低地址向高地址开始写(这很符合人的习惯),对于多字节字来说,如果先写入高位字节,则称作大端模式。反之则称作小端模式。也就是说,大端模式下,字节序和流设备的地址顺序是相反的,而小端模式则是相同的。一般网络协议都采用大端模式进行传输。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28859270/viewspace-775664/
,如需转载,请注明出处,否则将追究法律责任。