【发布时间】:2011-08-07 16:04:37
【问题描述】:
如果我有以下二进制文件:
<<32,16,10,9,108,111,99,97,108,104,111,115,116,16,170,31>>
我怎么知道它的长度?
【问题讨论】:
如果我有以下二进制文件:
<<32,16,10,9,108,111,99,97,108,104,111,115,116,16,170,31>>
我怎么知道它的长度?
【问题讨论】:
对于字节大小:
1> byte_size(<<32,16,10,9,108,111,99,97,108,104,111,115,116,16,170,31>>).
16
对于位大小:
2> bit_size(<<32,16,10,9,108,111,99,97,108,104,111,115,116,16,170,31>>).
128
当您有一个位串(位长不能被字节大小 8 整除的二进制文件)时,byte_size/1 将四舍五入到最接近的整个字节。 IE。位串适合的字节数:
3> bit_size(<<0:19>>).
19
4> byte_size(<<0:19>>). % 19 bits fits inside 3 bytes
3
5> bit_size(<<0:24>>).
24
6> byte_size(<<0:24>>). % 24 bits is exactly 3 bytes
3
7> byte_size(<<0:25>>). % 25 bits only fits inside 4 bytes
4
这是一个示例,说明从 8 位(适合 1 个字节)到 17 位(需要 3 个字节才能适合)的大小差异:
8> [{bit_size(<<0:N>>), byte_size(<<0:N>>)} || N <- lists:seq(8,17)].
[{8,1},
{9,2},
{10,2},
{11,2},
{12,2},
{13,2},
{14,2},
{15,2},
{16,2},
{17,3}]
【讨论】: