字节顺序

作者: 唐大方 | 来源:发表于2017-04-11 15:37 被阅读0次

    字节存储顺序,简称字节序,又称端序或尾序(英语:Endianness)。是指多字节数据在计算机内存中的存储顺序(即主机字节序);在网络传输时各字节的存储顺序(即网络字节序)。

    影响的是多字节类型的数据,比如int,short,long型,而对单字节数据 byte 却没有影响,大部分处理器以相同的顺序处理位元(bit),因此单字节的存放方法和传输方式一般相同。

    如果最低有效位最高有效位的前面,则称小端序;反之则称大端序。

    例如在C语言中,一个类型为 int 的变量x地址为0x100,它的十六进制为0x01234567, 那么其对应地址表达式&x的值为0x100。且x的四个字节将被存储在内存的0x100, 0x101, 0x102, 0x103位置。而存储的顺序有两种规则:

    0x01234567:

    0x01是高位,0x67是低位

    地址的分布:

    0x100、0x101、0x102、0x103

    0x100是低地址,0x103是高地址

    小端序:

    最低有效位在最高有效位的前面,也就是数值的低位存储在内存的低地址,高位存储在内存的高地址。

    存储的顺序是:

    0x67 0x45 0x23 0x01

    大端序:

    数值的高位存储在内存的低地址,低位存储在内存的高地址。

    存储的顺序是:

    0x01 0x23 0x45 0x67

    网络字节序:

    网络传输一般采用大端序,也被称之为网络字节序,或网络序。IP协议中定义大端序为网络字节序。

    IP地址的表示顺序

    不同的系统在内存存储多字节数据的方式有所不同,而在网络传输中,数据存储顺序不一定和系统存储顺序一样,因此为保证系统正确性和可移植性,需要利用系统的转换函数进行转换。以Ipv4的地址为例,一个IP地址的四个字节“192.168.1.100”,在PC架构的计算机中,数据的表示是低位优先(little-endian),由前至后是100、1、168、192;而在网络Socket协议所表示的网络传输中,则是高位优先(big-endian),由前至后是192、168、1、100,这需要在处理时通过函数转化。

    不同处理器体系与大小端序的对应关系:

    Intel架构x86、AMD架构,MOS Technology 6502,Z80,VAX,PDP-11等处理器为Little endian小端序。

    Motorola 6800,Motorola 68000,PowerPC 970,System/370,SPARC(除V9外)等处理器为Big endian大端序。

    ARM, PowerPC (除PowerPC 970外), DEC Alpha, SPARC V9, MIPS, PA-RISC and IA64的字节序是可自行配置成大端或小端序。

    相关文章

      网友评论

        本文标题:字节顺序

        本文链接:https://www.haomeiwen.com/subject/qthuattx.html