ica*_*s74 3 binary erlang types data-representation
得到了另一个Erlang二进制表示查询('这就是我现在正在阅读的内容,并且需要二进制协议实现).
如果我正确理解了类型说明符,那么,对于"float"类型值,8字节表示看起来很好(这是在64位Win7上).
1> <<A1/binary>> = <<12.3214/float>>.
<<64,40,164,142,138,113,222,106>>
Run Code Online (Sandbox Code Playgroud)
然而令我难过的是,"整数"类型值的二进制表示.
2> <<A2/binary>> = <<32512/integer>>.
<<0>>
3> <<A3/binary>> = <<232512518/integer>>.
<<6>>
4> <<A5/binary>> = <<80/integer>>.
<<"P">>
Run Code Online (Sandbox Code Playgroud)
为什么所有这些都用1个字节表示?有人可以解释一下吗?
Ada*_*erg 10
您没有将Erlang术语转换为二进制表示形式.您正在使用二进制语法来构建二进制文件.使用整数将截断它们以适合一个字节:
3> <<255/integer>>. % Under one byte
<<"ÿ">>
4> <<256/integer>>. % "Over" one byte
<<0>>
Run Code Online (Sandbox Code Playgroud)
试试这个:
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>>
Run Code Online (Sandbox Code Playgroud)
131是版本号,97是一个小整数(8位),98是一个大整数(32位),110(和111)是用于bignum整数.其余的是实际数字的数据.
有关字节含义的更多信息,请参阅Erlang二进制术语格式的文档.