Je suis en train de mettre en œuvre le code Python suivant et obtenir le même résultat en Erlang:Traduire Python struct.pack Erlang
struct.pack('Q', long(20000001))
Toutes les idées?
Je suis en train de mettre en œuvre le code Python suivant et obtenir le même résultat en Erlang:Traduire Python struct.pack Erlang
struct.pack('Q', long(20000001))
Toutes les idées?
L'équivalent le plus proche de pack
/unpack
dans Erlang est obtenu en utilisant le bit syntax.
Comme le format Q
est mis en correspondance avec 8 octets unsigned long long
par paquet (un), vous pouvez obtenir quelque chose de similaire en écrivant:
40> <<V:64>>.
<<0,0,0,0,1,49,45,1>>
Notez que dans Erlang le endianess par défaut est grand-boutiste. Vous pouvez changer cela (ou le mentionner explicitement):
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>>
Vous pouvez effectuer l'opération inverse en utilisant la même syntaxe (ici spécifiant explicitement le signedness):
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
S'il vous plaît noter la sortie standard des valeurs binaires peut être déroutante à première vue lors de la comparaison de Python à Erlang:
Python Erlang
\x00 => <<0>>
\x01 => <<1>>
- => <<45>>
1 => <<49>> ! do not confuse the value 1 (0x01) and the character '1' !
Ainsi, la chaîne binaire Python \x01-1\x01\x00\x00\x00\x00
est écrite <<1, 45, 49, 1, 0, 0, 0, 0>>
dans Erlang.
Merci pour votre réponse. Je cherche le remplacement de l'emballage. Le résultat de struct.pack ressemble à ceci: struct.pack ('Q', long (20000001)) '\ x01-1 \ x01 \ x00 \ x00 \ x00 \ x00' – Gadi
@Gadi ??? Pour autant que je sache, '<>' produit le même résultat que le fragment de code Python. J'ai édité la réponse pour la rendre un peu plus claire. –
Merci! était très utile – Gadi