Erlang シェルでは、次のことができます。
A = 300.
300
<<A:32>>.
<<0, 0, 1, 44>>
しかし、次のことを試すと:
B = term_to_binary({300}).
<<131,104,1,98,0,0,1,44>>
<<B:32>>
** exception error: bad argument
<<B:64>>
** exception error: bad argument
最初のケースでは、整数を取得し、ビット文字列構文を使用してそれを 32 ビット フィールドに入れています。それは期待どおりに機能します。2 番目のケースでは、term_to_binary
BIF を使用してタプルをバイナリに変換し、そこからビット文字列構文を使用して特定のビットをアンパックしようとしています。最初の例は機能するのに、2 番目の例は失敗するのはなぜですか? 両者は非常に似たようなことをしているようです。