I come, I see, I conquer

                    —Gaius Julius Caesar

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

一、字节序

 

    在计算机科学领域中,字节序(Endianness)是指存放多字节数据的字节(byte)的顺序,典型的情况是整数在内存中的存放方式和网络传输的传输顺序。

 

    1、主机序

 

    多字节数据在计算机内存中的存放顺序。

    对于单一的字节(a byte),大部分处理器以相同的顺序处理位元(bit),因此单字节的存放方法和传输方式一般相同。对于多字节数据,如整数(32位机中一般占4字节),在不同的处理器的存放方式主要有两种,以内存中0x0A0B0C0D的存放方式为例,分别有以下几种方式:

 

    大端模式(big endian):高字节放到低地址上

地址

1000

0A

1001

0B

1002

0C

1003

0D

 

    小端模式(little endian):高字节放到高地址上

地址

1000

0D

1001

0C

1002

0B

1003

0A

 

    2、网络序

 

    多字节数据在网络中的传输顺序。IP协议用大端序作为网络字节序,因此大端序也称为网络序。

 

 

 

二、字节序与什么有关


    字节序与计算机的体系架构及操作系统有关。


    小端序(基于架构的操作系统)

    DragonFlyBSD on x86, and x86-64
    FreeBSD on x86, x86-64, and Itanium
    Linux on x86, x86-64, MIPSEL, Alpha, Itanium, S+core, MN103, CRIS, Blackfin, MicroblazeEL, ARM, M32REL, TILE, SH, XtensaEL and UniCore32
    Mac OS X on x86, x86-64
    iOS on ARM
    NetBSD on x86, x86-64, Itanium, etc.
    OpenBSD on x86, x86-64, Itanium, etc.
    OpenVMS on VAX, Alpha and Itanium
    Solaris on x86, x86-64, PowerPC
    Tru64 UNIX on Alpha
    ESX on x86, x86-64
    Windows on x86, x86-64, Alpha, PowerPC, MIPS and Itanium


    大端序(基于架构的操作系统)

    AIX on POWER
    AmigaOS on PowerPC and 680x0
    FreeBSD on PowerPC and SPARC
    HP-UX on Itanium and PA-RISC
    Linux on MIPS, SPARC, PA-RISC, POWER, PowerPC, 680x0, ESA/390, z/Architecture, H8, FR-V, AVR32, Microblaze, ARMEB, M32R, SHEB and Xtensa.
    Mac OS on PowerPC and 680x0
    Mac OS X on PowerPC
    NetBSD on PowerPC, SPARC, etc.
    OpenBSD on PowerPC, SPARC, etc.
    MVS and DOS/VSE on ESA/390, and z/VSE and z/OS on z/Architecture
    Solaris on SPARC


 

 

三、字节序转换

 

    实际应用中,很多人不知道是否要做字节序转换,怎么转。通用的办法就是,不管主机的字节序是什么,往网络上发送前,都转换成网络字节序,也就是用htons或htonl;而从网络收到的数据,不管主机是什么字节序,都转换成主机字节序,也就是ntohs或者ntohl。按照这条规则,一般来说,不会出什么问题了。

 

     

 

 

posted on 2012-04-28 10:14  jcsu  阅读(1027)  评论(1编辑  收藏  举报