字节序
字节序是一个描述如何存储数据的计算机科学术语。具体来说,它定义了多字节数据类型的哪一端包含最高有效值。字节序有两种类型:大端序和小端序。
大端序
大端序是存储二进制数据最常见的方式。它将最高有效值(或最大值)放在最前面,后面依次是有效性较低的值。例如,整数 123 的大端序表示会先放置百位值(1),然后是十位值(2),最后是个位值(3),即 [123]。
小端序
小端序会先存储最低有效值,后面依次是有效性越来越高的值。例如,数字 123 的小端序表示是 [321]。文本字符串 "ABC" 表示为 [CBA]。
端序转换
在大多数情况下,开发人员不需要指定字节序,因为编译器会为特定平台生成正确类型的数据。但是,程序可能需要处理外部输入,例如以不同字节序存储数据的文件格式。在这种情况下,必须将数据从小端序转换为大端序,或反向转换。
转换字节序并不像反转数据那么简单。必须反转的是字节,而不是位。换句话说,每个字节(或由八个位组成的块)必须保持不变,但字节的顺序会改变。可以使用数据的十六进制或二进制表示来说明这一点。
例如,整数 41,394 的大端序表示如下:
十六进制: A1B2
二进制: 1010000110110010
将这些数据转换为小端序时,并不是反转整个数据,而是反转数据中的各个字节。十六进制使用两位表示每个字节,即 [A1][B2];二进制使用八位表示每个字节,即 [10100001][10110010]。
因此,41,394 的小端序表示如下:
十六进制: B2A1
二进制: 1011001010100001
NOTE: 某些处理器可以直接按大端序或小端序读取数据,而无需进行转换。这称为双端序数据访问。
测试你的知识