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

では、長さ= 2のときに長さ*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 に答える