Skip to content

Commit

Permalink
7-note
Browse files Browse the repository at this point in the history
  • Loading branch information
helloworldcoding committed Jan 3, 2019
1 parent 3da6ca8 commit 7135b0e
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions 7-binary/7-note.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,31 @@
utf16,utf32 无需提供该值
一个片段的总长度是Size × Unit字节。binary类型的片段长度必需是8的整数倍

字节序:
大端字节序:高位字节在前,低位字节在后,人类读写数值的方法。
小端字节序:地位字节在前,高位字节在后。电路先处理低位字节。除了计算机内部处理,其他场合几乎都是大端字节序,比如文件传输和文件存储。
读取的时候要考虑字节序,其他情况都不用考虑。

举个例子:处理器读到一个16为的整数,如果是大端字节,就按下面的方式转换.
x = buf[offset] * 256 + buf[offset+1];
buf是整个数据块在内存中的起始地址,offset是当前正在读取的位置。第一个字节乘以256,再加上第二个字节,就是大端字节序的值。等效于下面的式子
x = buf[offset] << 8 | buf[offset+1];
如果是小端字节序:
x = buf[offset+1] << 8 | buf[offset];
%% 32位大端字节序
x = (buf[offset+3]) | (buf[offset+2] << 8) | (buf[offset+1] << 16) | (buf[offset] << 24)
%% 32位小端字节序
x = (buf[offset]) | (buf[offset+1] << 8) | (buf[offset+2] << 16) | (buf[offset+3] << 24)

1><<16#12345678:32/big-signed>>.
<<18,52,86,120>>
2><<16#12345678:32/little-signed>>.
<<120,86,52,18>>
3><<12345678:32/little-signed>>. %% 地位先发送
3><<12345678:32/little-signed>>. %% 低位在前
<<78,97,188,0>>
4><<12345678:32/big>>.
<<0,188,97,78>> %% 高位的数据先发送
<<0,188,97,78>> %% 高位的数据在前,符合人类的阅读习惯
5>integer_to_list(12345678,2).
"101111000110000101001110"
"10111100 01100001 01001110"
Expand Down

0 comments on commit 7135b0e

Please sign in to comment.