gpt4 book ai didi

types - 浮点和整数的Erlang二进制表示,差异?

转载 作者:行者123 更新时间:2023-12-01 08:38:47 27 4
gpt4 key购买 nike

得到另一个 Erlang 二进制表示查询('因为这就是我最近正在阅读的内容,并且需要二进制协议(protocol)实现)。

如果我正确理解了类型说明符,那么对于“浮点”类型值,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 个字节表示?有人可以解释一下吗?

最佳答案

您没有将 Erlang 术语转换为它们的二进制表示。您正在使用二进制语法来构建二进制文件。使用整数会将它们截断以适应一个字节:

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 整数。其余的是实际数字的数据。

the documentation for the Erlang binary term format有关字节含义的更多信息。

关于types - 浮点和整数的Erlang二进制表示,差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6582314/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com