偶遇字节序

一直没有搞懂某个脚本的这句代码:
printf “\x01\x00\x00\x00” > $out_file
运行时,其作用是将一个4字节整数1写入文件中。
od -N4 -tx1 $out_file,以一字节十六进制dump数据,看到输出结果为:
0000000 01 00 00 00
与输入顺序相同。
od -N4 -tu4 $out_file,以四字节无符号整型dump数据,则结果为
0000000 1
明显与输入顺序不同,因为输入是01000000。其值绝对可能是1。
今天请教高手后发现,原来是字节序的问题。
似乎除IBM的CPU外,大部分机器CPU都是小端字节序,包括INTEL。
小端字节序在解析时从高位开始。例如,内存中4字节如下分布:
地址:01 02 03 04
内存:01 00 00 00
那么小端字节序CPU以4字节整型解析该段内存数据时,得到的值为00000001。即先从地址04开始,往小地址读4字节。
相反,大端字节序解析得到的值为01000000。即先从小地址01开始,往大地址读4字节。

Advertisements

About chill

不再执意欢喜反倒让人欢喜
This entry was posted in TECH. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s