如何在erlang中生成格式为0x00000001的32位大端数字
How to generate a 32 bit big-endian number in the format 0x00000001 in erlang
我需要生成一个具有以下属性的变量 -
32 位大端整数,初始化为 0x00000001(我将把这个数字一个一个递增)。 erlang 中有这方面的语法吗?
根据文档[1],以下代码段应以小端格式生成一个 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
在 Erlang 中,通常您会将此类数字作为纯整数保存在程序中:
X = 1.
或者等效地,如果你想使用十六进制文字:
X = 16#00000001.
当需要将数字转换为二进制表示形式以便将其发送到其他地方时,请使用位语法:
<<X:32/big>>
这个 returns 一个包含四个字节的二进制文件:
<<0,0,0,1>>
(这是一个 32 位大端整数。事实上,大端是默认值,所以你可以只写 <<X:32>>
。<<X:64/little>>
将是一个 64 位小-字节序整数。)
另一方面,如果您只想以 0x00000001
格式打印数字,请使用带有此格式说明符的 io:format
:
io:format("0x~8.16.0b~n", [X]).
8
告诉它使用8个字符的字段宽度,16
告诉它使用基数16(即十六进制),0
是填充字符, 用于将数字填充到字段宽度。
请注意,与其他语言相比,在 Erlang 中递增变量的工作方式不同。一旦一个变量被赋予了一个值,你就不能改变它,所以你最终会进行递归调用,将新值作为参数传递给函数。 This answer 有个例子。
我需要生成一个具有以下属性的变量 - 32 位大端整数,初始化为 0x00000001(我将把这个数字一个一个递增)。 erlang 中有这方面的语法吗?
根据文档[1],以下代码段应以小端格式生成一个 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
在 Erlang 中,通常您会将此类数字作为纯整数保存在程序中:
X = 1.
或者等效地,如果你想使用十六进制文字:
X = 16#00000001.
当需要将数字转换为二进制表示形式以便将其发送到其他地方时,请使用位语法:
<<X:32/big>>
这个 returns 一个包含四个字节的二进制文件:
<<0,0,0,1>>
(这是一个 32 位大端整数。事实上,大端是默认值,所以你可以只写 <<X:32>>
。<<X:64/little>>
将是一个 64 位小-字节序整数。)
另一方面,如果您只想以 0x00000001
格式打印数字,请使用带有此格式说明符的 io:format
:
io:format("0x~8.16.0b~n", [X]).
8
告诉它使用8个字符的字段宽度,16
告诉它使用基数16(即十六进制),0
是填充字符, 用于将数字填充到字段宽度。
请注意,与其他语言相比,在 Erlang 中递增变量的工作方式不同。一旦一个变量被赋予了一个值,你就不能改变它,所以你最终会进行递归调用,将新值作为参数传递给函数。 This answer 有个例子。