about字节序

来源:互联网 发布:js鼠标滑过图片 编辑:程序博客网 时间:2024/05/29 18:29

 

字节序:

 

原来就记了x86是LE。 今天人家问起来,这个是和CPU有关呢?还是和OS有关。 我一时也没有给人家一个肯定的答案。回来google下

 

处理器    操作系统    字节排序
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

 

LE: (小端) 0x12345678 就是0x12放在高地址。  0x78放在低地址。就是最有用的数值放在高位。

BE: (大端) 0x12345678 就是0x12就是低地址。  顺着来就是了。

因为大小端 的起因是《 Gulliver’sTravels》 就是小人国为了先吃鸡蛋的小端还是大端,天天打架。

因为我们日常用的时候,X86  ARM 都是LE。 正常人吃鸡蛋也都是先吃小端的。  这么记下好了

 

int isLitterEndian()

{

unsigned short abc = 0x1234;

if ((*(char*)&abc) == 0x34)

{

return 1;

}

return 0;

}

 

MIPS 大端的了。JAVA均为大端。

 

网络序:是以大端序。 不同平台通信时,需要考虑网络序的转换问题。

原来写的一个WSB。 服务器端是JAVA写的, 后台有部分的代码是用C写的。 也用到了网络序和主机序的转换。

 

public static long ntol(long n){

return (((n & 0xff000000) >> 24) | ((n & 0x00ff0000) >> 8)

| ((n & 0x0000ff00) << 8) | ((n & 0x000000ff) << 24)); 

}

 

原创粉丝点击