파이썬에서 바이너리 육각형 데이터를 포장 할 수있는 방법은 무엇입니까?
해결책
이 작업을 수행하는 쉬운 방법이 있습니다. binascii
기준 치수:
>>> import binascii
>>> print binascii.hexlify("ABCZ")
'4142435a'
니블 주문에 대해 오해를하지 않는 한 (첫 번째는 기본값입니다), 그것은 완벽하게 충분해야합니다!
또한, 파이썬은 hashlib.md5
물체에는 a hexdigest()
메소드 MD5 다이제스트를 ASCII 육각 문자열로 자동 변환하여 MD5 다이제스트에는이 방법이 필요하지 않도록합니다. 도움이되기를 바랍니다.
다른 팁
struct.pack에 해당하는 "Hex Nibble"코드가 없으므로 다음과 같이 먼저 바이트로 수동으로 포장해야합니다.
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]))
또는 더 나은 것은 Hex Codec을 사용할 수 있습니다. 즉.
>>> data = hex_string.decode('hex')
>>> data
'\xab\xcd\xef\x12'
포장을 풀려면 결과를 유사하게 16 진로 다시 인코딩 할 수 있습니다.
>>> data.encode('hex')
'abcdef12'
그러나 예를 들어, 인코딩 할 때 육각 표현을 통해 왕복을 할 필요가 없을 것입니다. MD5 이진 다이제스트를 직접 사용하십시오. 즉.
>>> x = md5.md5('some string')
>>> x.digest()
'Z\xc7I\xfb\xee\xc96\x07\xfc(\xd6f\xbe\x85\xe7:'
이것은 팩 () ED 표현과 동일합니다. HEX 표현을 얻으려면 위의 동일한 포장되지 않은 방법을 사용하십시오.
>>> x.digest().decode('hex')
'acbd18db4cc2f85cedef654fccc4a4d8'
>>> x.hexdigest()
'acbd18db4cc2f85cedef654fccc4a4d8'
편집] : 더 나은 방법을 사용하도록 업데이트되었습니다 (Hex Codec)
파이썬에서 당신은 그것을 사용합니다 구조 이것을위한 모듈.
>>> 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
제휴하지 않습니다 StackOverflow