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));
}