J'ai un protocole qui nécessite la conversion de données binaires vers et à partir d'une chaîne hexadécimée où les faibles-quartets (4 bits inférieurs de chaque octet) viennent en premier - ainsi par exemple la chaîne Python '\ xab \ xcd' serait encodée en 'badc'. Ce format impair provient des fonctions PHP/Perl pack
et unpack
au format h*
(voir http://php.net/manual/en/function.pack.php).Binaire à hexadécimal en Python, premier encodage faible
Évidemment, il est évident que binascii.hexlify()
et al n'y arriveront pas. J'ai essayé d'utiliser différents formats avec le module struct
ainsi que array
byteswapping as suggested here mais je n'ai pas réussi à le faire fonctionner.
Je fini par résoudre avec un peu vieillot peu de jongler comme ceci:
def to_low_nibble_hex(value):
"""Convert a binary string to hex using low-nibble first encoding
"""
r = []
for c in value:
c = ord(c)
hb = (0x0f & c) << 4
lb = (0xf0 & c) >> 4
nc = chr(hb | lb)
r += [nc]
return binascii.hexlify(''.join(r))
Cela semble bien fonctionner dans mon cas, mais je me demandais si quelqu'un peut suggérer une approche plus formelle.
En effet, cela semble propre et efficace, et je vais probablement l'adopter, alors merci! Cependant, je me demande toujours s'il existe une solution plus standard. – shevron