对于跨越多字节的程序对象,必须建立两个规则:对象的地址是什么和存储器中如何对字节进行排序.
一个w位的整数,位表示为[xw-1,xw-2 … , x1, x0],其中是xw-1最高有效位,而是x0最低有效位.
对表示一个对象的字节序列排序,有两个通用的规则:
小端法(little endian):在存储器中按照从最低有效字节到最高有效位字节的顺序存储对象.
大端法(big endian):在存储器中按照从最高有效字节到最低有效位字节的顺序存储对象.
大多数源自以前的Digital Equipment(现在是Compaq公司的一部分)的机器,以及Intel的机器都采用小端法;IBM,Motorola和Sun Microsystems的大多数机器采用大端法.IBM制造的个人计算机使用的是Intel兼容的处理器,因此就是小端法.许多微处理器芯片,包括Alpha和Motorola的PowerPC,能够在运行在任一种模式中,其取决于芯片加电启动时确定的字节顺序规则.
不同类型机器之间通过网络传送二进制数据时,字节顺序会成为问题.TCP/IP为任意整数数据项定义一致的网络字节顺序(network byte order)为大端字节顺序.
C语言中的字符串被编码为一个以null(其值为零)字符结尾的字符数组.每个字符都由某个标准编码来表示,最常见的就是ASCII字符码.在使用ASCII码作为字符码的任何系统上都将得到相同的结果,与字节顺序和字大小规则无关.因而文本数据比二进制数据具有更强的平台独立性.
判断所用机器是那种存储顺序的几种方法:
参考:
<<深入理解计算机系统>>(修订版)第2章 [美]Randal E.Bryant David O’Hallaron 著
龚奕利 雷迎春 译