php ¿Cómo puedo descomprimir datos con formato hexadecimal binario en Python?


1 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)

php python binary hex

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?



Related