[Php] ¿Cómo puedo descomprimir datos con formato hexadecimal binario en Python?


Answers

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)

Question

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?