如何在erlang中生成格式为0x00000001的32位大端数字

时间:2019-03-25 07:08:47

标签: erlang

我需要生成一个具有以下属性的变量- 32位,big-endian整数,以0x00000001初始化(我将以1递增该数字)。 erlang中有语法吗?

2 个答案:

答案 0 :(得分:4)

在Erlang中,通常您会将数字保留为纯整数,例如:

X = 1.

或等效地,如果要使用十六进制文字:

X = 16#00000001.

当需要将数字转换为二进制表示形式以便将其发送到其他位置时,请使用位语法:

<<X:32/big>>

这将返回一个包含四个字节的二进制文件:

<<0,0,0,1>>

(这是一个32位的big-endian整数。实际上,big-endian是默认的,因此您可以编写<<X:32>><<X:64/little>>是一个64位的little-endian整数。 )

另一方面,如果您只想以0x00000001格式打印数字,请在此格式说明符中使用io:format

io:format("0x~8.16.0b~n", [X]).

8告诉它使用8个字符的字段宽度,16告诉它使用基数16(即十六进制),而0是填充字符,使用填充数字直到字段宽度。


请注意,与其他语言相比,增加变量在Erlang中的工作方式不同。一旦为变量分配了值,就无法对其进行更改,因此最终将进行递归调用,将新值作为参数传递给函数。 This answer有一个例子。

答案 1 :(得分:0)

根据文档[1],以下代码段应以little endian生成32位带符号整数。

1> I = 258.                              
258
2> B = <<I:4/little-signed-integer-unit:8>>.
<<2,1,0,0>>

以下内容应产生大尾数:

1> I = 258.
258
2> B = <<I:4/big-signed-integer-unit:8>>.
<<0,0,1,2>>

[1] http://erlang.org/doc/programming_examples/bit_syntax.html