2

我很难理解为什么实际上需要“单位大小”块。

我可以打字:

1> << Y:4/integer-unit:8 >> = << 1,2,3,4 >>.
<<1,2,3,4>>
2> Y.                                       
16909060

但是我可以在不指定单位大小的情况下得到相同的结果:

3> << X:32/integer >> = << 1,2,3,4 >>.      
<<1,2,3,4>>
4> X.
16909060

所以,请给我建议一些情况,什么时候我可以从使用“单位大小”块中获得真正的好处。

谢谢

4

3 回答 3

5

我发现了需要“单位大小”块时的情况:

如果您需要从下一个块的比特流大小中读取,并匹配它

这个例子应该说明问题:

1> << Length, Value:(Length*8)/integer >> = << 2, 256:16 >>.   
* 2: illegal bit size

但是你可以简单地做到这一点,使用“单位大小”块:

2> << Length, Value:Length/integer-unit:8 >> = << 2, 256:16 >>.
<<2,1,0>>
3> Value.
256
于 2012-08-08T13:31:25.117 回答
1

程序员很少使用单位大小。它在内部使用,因为/binary默认情况下具有 8 位的单位大小。这通常是您要为二进制部分挑选的内容。通常情况是,对于整数,您希望以位为单位指定大小,但您希望以 8 位字节为单位指定二进制文件。

但是,在某些情况下,您可能希望以不同的方式捕捉事实,因此存在单位类型说明符来解决问题。

于 2012-08-08T13:00:49.383 回答
0

我不明白。

您当然可以读取二进制文件的第一个字节以获得下一个值的长度:

1> X = <<16, 256:16>>.
<<16,1,0>>

2> <<Length, Value:Length>> = X.
<<16,1,0>>

3> Length.
16

4> Value.
256

并且 (2*8) 是合法的大小:

5> f(). 
ok

6> X = <<2, 256:16>>.
<<2,1,0>>

7> <<Length, Value:(2*8)>> = X.
<<2,1,0>>

8> Length.
2

9> Value.
256

那么为什么当 Length=2 时 Size of Length*8 会失败呢?

10> f(Length).
ok

11> f(Value).
ok

12> <<Length, Value:(Length*8)>> = X.
* 1: illegal bit size
于 2012-11-30T00:17:48.003 回答