php - para - convertir de decimal a hexadecimal en python
¿Cómo puedo descomprimir datos con formato hexadecimal binario en Python? (3)
Usando la función PHP pack () , he convertido una cadena en una representación hexagonal binaria:
$string = md5(time); // 32 character length
$packed = pack(''H*'', $string);
El formato H * significa "Cadena hexagonal, primer mordisco alto primero".
Para descomprimir esto en PHP, simplemente usaría la función unpack () con el indicador de formato H *.
¿Cómo descomprimiría esta información en Python?
Hay una manera fácil de hacer esto con el módulo binascii
:
>>> import binascii
>>> print binascii.hexlify("ABCZ")
''4142435a''
A menos que esté malinterpretando algo sobre el orden de mordisquear (el mordisco alto es el predeterminado), ¡eso debería ser perfectamente suficiente!
Además, los objetos hashlib.md5
de Python tienen un método hexdigest()
para convertir automáticamente el resumen MD5 a una cadena hexadecimal ASCII, de modo que este método ni siquiera es necesario para los resúmenes MD5. Espero que ayude.
No hay un código correspondiente de "nibble hexadecimal" para struct.pack, por lo que tendrá que empacar manualmente en bytes primero, como por ejemplo:
hex_string = ''abcdef12''
hexdigits = [int(x, 16) for x in hex_string]
data = ''''.join(struct.pack(''B'', (high <<4) + low)
for high, low in zip(hexdigits[::2], hexdigits[1::2]))
O mejor, puedes usar el códec hexadecimal. es decir.
>>> data = hex_string.decode(''hex'')
>>> data
''/xab/xcd/xef/x12''
Para desempaquetar, puede codificar el resultado de nuevo para hexagonal de manera similar
>>> data.encode(''hex'')
''abcdef12''
Sin embargo, tenga en cuenta que, para su ejemplo, probablemente no haya necesidad de realizar el viaje de ida y vuelta a través de una representación hexadecimal cuando se codifica. Solo usa el resumen binario md5 directamente. es decir.
>>> x = md5.md5(''some string'')
>>> x.digest()
''Z/xc7I/xfb/xee/xc96/x07/xfc(/xd6f/xbe/x85/xe7:''
Esto es equivalente a su presentación pack () ed. Para obtener la representación hexadecimal, use el mismo método de desempaquetado anterior:
>>> x.digest().decode(''hex'')
''acbd18db4cc2f85cedef654fccc4a4d8''
>>> x.hexdigest()
''acbd18db4cc2f85cedef654fccc4a4d8''
[Editar]: actualizado para usar un método mejor (códec hexadecimal)
En Python usa el módulo struct para esto.
>>> from struct import *
>>> pack(''hhl'', 1, 2, 3)
''/x00/x01/x00/x02/x00/x00/x00/x03''
>>> unpack(''hhl'', ''/x00/x01/x00/x02/x00/x00/x00/x03'')
(1, 2, 3)
>>> calcsize(''hhl'')
8
HTH