我需要生成一个具有以下属性的变量 - 32 位大端整数,用 0x00000001 初始化(我将一个一个地递增该数字)。erlang 中有语法吗?
在 Erlang 中,通常你会在程序中保留这样的数字作为普通整数:
X = 1.
Run Code Online (Sandbox Code Playgroud)
或者等效地,如果您想使用十六进制文字:
X = 16#00000001.
Run Code Online (Sandbox Code Playgroud)
当需要将数字转换为二进制表示以将其发送到其他地方时,请使用位语法:
<<X:32/big>>
Run Code Online (Sandbox Code Playgroud)
这将返回一个包含四个字节的二进制文件:
<<0,0,0,1>>
Run Code Online (Sandbox Code Playgroud)
(这是一个 32 位 big-endian 整数。事实上,big-endian 是默认值,所以你可以只写<<X:32>>.<<X:64/little>>将是一个 64 位 little-endian 整数。)
另一方面,如果您只想以0x00000001格式打印数字,请使用io:format以下格式说明符:
io:format("0x~8.16.0b~n", [X]).
Run Code Online (Sandbox Code Playgroud)
将8告诉它要使用的8个字符的字段宽度,所述16告诉它使用基数16(即十六进制),并且0是填充字符,用于填充的数量最多的字段宽度。
请注意,与其他语言相比,在 Erlang 中增加变量的工作方式不同。一旦一个变量被赋值,你就不能改变它,所以你最终会进行递归调用,将新值作为参数传递给函数。 这个答案有一个例子。