我们知道在计算机中数据是以二进制来存储的。最常见的计量存储单位大小的是字节。那么什么是字节序呢?
字节序,又称端序,尾序(英语:Endianness)。在计算机科学领域中,字节序是指存放多字节数据的字节(byte)的顺序,典型的情况是整数在内存中的存放方式和网络传输的传输顺序。Endianness有时候也可以用指位序(bit)。
一般而言,字节序指示了一个UCS-2字符的哪个字节存储在低地址。如果LSByte在MSByte的前面,即LSB为低地址,则该字节序是小端序;反之则是大端序。在网络编程中,字节序是一个必须被考虑的因素,因为不同的处理器体系可能采用不同的字节序。在多平台的代码编程中,字节序可能会导致难以察觉的bug。
由上面的描述我们知道字节序是很重要的,那么怎么检测你机器上使用的是大端序还是小端序呢?
我们先看看大、小端序的详细定义。
大端序:
示例中,最高有效位(MSB, Most Significant Byte)是0x0A 存储在最低的内存地址处。下一个字节0x0B存在后面的地址处。正类似于十六进制字节从左到右的阅读顺序。
小端序:
最低有效位(LSB,Least Significant Byte)是0x0D 存储在最低的内存地址处。后面字节依次存在后面的地址处。
下面我写了一个简单的C程序来判断你机器是使用大端序还是小端序:
帮助
代码定义了一个union变量,里面包含了一个1字节的char变量c,一个2字节的int变量i。整个结构体的大小的2个字节。通过将 0×0201赋值给test的int部分i,然后检查它的低地址即char部分的c(为什么?看看union变量)。如果c中保存的是0×02则代表机器 使用大端序,如果保存的是0×01则代表机器使用小端序。
参考资料:http://zh.wikipedia.org/zh/%E5%AD%97%E8%8A%82%E5%BA%8F#.E5.A4.A7.E7.AB.AF.E5.BA.8F
(全文完)
更多新手学习C语言的博文请关注:http://dabentu.com/1188.html