3

別のErlangバイナリ表現クエリを取得しました('cozは最近私が読んでいるものであり、バイナリプロトコルの実装が必要です)。

型指定子を正しく理解していれば、「浮動小数点」型の値の場合、8バイト表現で問題ないように見えます(これは64ビットWin7の場合です)。

1> <<A1/binary>> = <<12.3214/float>>.
<<64,40,164,142,138,113,222,106>>

しかし、私を困惑させたのは、「整数」型の値のバイナリ表現でした。

2> <<A2/binary>> = <<32512/integer>>.
<<0>>
3> <<A3/binary>> = <<232512518/integer>>.
<<6>>
4> <<A5/binary>> = <<80/integer>>.
<<"P">>

それらすべてが1バイトで表されるのはなぜですか?誰かがこれを説明できますか?

4

1 に答える 1

10

Erlangの用語をバイナリ表現に変換していません。バイナリ構文を使用してバイナリを構築しています。整数を使用すると、1バイトに収まるように切り捨てられます。

3> <<255/integer>>. % Under one byte
<<"ÿ">>
4> <<256/integer>>. % "Over" one byte
<<0>>

これを試して:

5> term_to_binary(32512).
<<131,98,0,0,127,0>>
6> term_to_binary(232512518).
<<131,110,4,0,6,220,219,13>>
7> term_to_binary(80).
<<131,97,80>>

131はバージョン番号、97は小整数(8ビット)、98は大整数(32ビット)、110(および111)はbignum整数用です。残りは実際の数のデータです。

バイトの意味の詳細については、Erlangバイナリ用語フォーマットのドキュメントを参照してください。

于 2011-07-05T12:22:23.580 に答える