将 Python struct.pack 翻译成二语
Translate Python struct.pack to erlang
我正在尝试实现以下 python 代码并在 Erlang 中获得相同的结果:
struct.pack('Q', long(20000001))
有什么想法吗?
Erlang 中最接近 pack
/unpack
的等效项是使用 bit syntax.
实现的
由于 Q
格式被 (un)pack 映射到 8 字节 unsigned long long
,你可能会通过这样写得到类似的东西:
40> <<V:64>>.
<<0,0,0,0,1,49,45,1>>
请注意,在 Erlang 中,默认字节序是大端字节序。您可能想要更改它(或明确提及):
41> <<V:64/big>>.
<<0,0,0,0,1,49,45,1>>
42> <<V:64/little>>. %% <= Given your example, probably what you want.
<<1,45,49,1,0,0,0,0>>
43> <<V:64/native>>. %% <= Native endianness
%% -- dependent of the CPU Erlang is running on.
<<1,45,49,1,0,0,0,0>>
您可以使用相同的语法执行反向操作(此处明确指定符号):
44> <<B:64/unsigned-big>> = <<V:64>>. %% big-endian (default) to big-endian
45> B.
20000001
46> <<S:64/unsigned-little>> = <<V:64>>. %% big-endian to little-endian
47> S.
84777848354635776
48> <<L:64/unsigned-little>> = <<V:64/little>>. %% little-endian to little-endian
<<1,45,49,1,0,0,0,0>>
49> L.
20000001
请注意,将 Python 与 Erlang 进行比较时,乍一看二进制值的标准输出可能会造成混淆:
Python Erlang
\x00 => <<0>>
\x01 => <<1>>
- => <<45>>
1 => <<49>> ! do not confuse the value 1 (0x01) and the character '1' !
因此,Python二进制字符串\x01-1\x01\x00\x00\x00\x00
在Erlang中写成<<1, 45, 49, 1, 0, 0, 0, 0>>
。
我正在尝试实现以下 python 代码并在 Erlang 中获得相同的结果:
struct.pack('Q', long(20000001))
有什么想法吗?
Erlang 中最接近 pack
/unpack
的等效项是使用 bit syntax.
由于 Q
格式被 (un)pack 映射到 8 字节 unsigned long long
,你可能会通过这样写得到类似的东西:
40> <<V:64>>.
<<0,0,0,0,1,49,45,1>>
请注意,在 Erlang 中,默认字节序是大端字节序。您可能想要更改它(或明确提及):
41> <<V:64/big>>.
<<0,0,0,0,1,49,45,1>>
42> <<V:64/little>>. %% <= Given your example, probably what you want.
<<1,45,49,1,0,0,0,0>>
43> <<V:64/native>>. %% <= Native endianness
%% -- dependent of the CPU Erlang is running on.
<<1,45,49,1,0,0,0,0>>
您可以使用相同的语法执行反向操作(此处明确指定符号):
44> <<B:64/unsigned-big>> = <<V:64>>. %% big-endian (default) to big-endian
45> B.
20000001
46> <<S:64/unsigned-little>> = <<V:64>>. %% big-endian to little-endian
47> S.
84777848354635776
48> <<L:64/unsigned-little>> = <<V:64/little>>. %% little-endian to little-endian
<<1,45,49,1,0,0,0,0>>
49> L.
20000001
请注意,将 Python 与 Erlang 进行比较时,乍一看二进制值的标准输出可能会造成混淆:
Python Erlang
\x00 => <<0>>
\x01 => <<1>>
- => <<45>>
1 => <<49>> ! do not confuse the value 1 (0x01) and the character '1' !
因此,Python二进制字符串\x01-1\x01\x00\x00\x00\x00
在Erlang中写成<<1, 45, 49, 1, 0, 0, 0, 0>>
。