파이썬에서 16진수 문자열을 바이트로 변환하는 방법은 무엇입니까?
여러 유형의 값을 나타내는 긴 16진수 문자열이 있습니다.이 16진수 문자열을 다음으로 변환해야 합니다.bytes
또는bytearray
원시 데이터에서 각 값을 추출할 수 있습니다.어떻게 해야 하나요?
예를 들어, 문자열은"ab"
바이트로 변환해야 합니다.b"\xab"
또는 동등한 바이트 배열입니다.긴 예:
>>> # what to use in place of `convert` here?
>>> convert("8e71c61de6a2321336184f813379ec6bf4a3fb79e63cd12b")
b'\x8eq\xc6\x1d\xe6\xa22\x136\x18O\x813y\xeck\xf4\xa3\xfby\xe6<\xd1+'
16진수 문자열이 다음과 같다고 가정합니다.
>>> hex_string = "deadbeef"
다음과 같이 bytearray(파이썬 3 및 2.7)로 변환합니다.
>>> bytearray.fromhex(hex_string)
bytearray(b'\xde\xad\xbe\xef')
바이트 개체로 변환(Python 3):
>>> bytes.fromhex(hex_string)
b'\xde\xad\xbe\xef'
참고:bytes
의 불변 버전입니다.bytearray
.
문자열로 변환(피톤 ≤ 2.7):
>>> hex_data = hex_string.decode("hex")
>>> hex_data
"\xde\xad\xbe\xef"
사용자가 원하는 것을 수행하는 바이테어레이에 내장된 기능이 있습니다.
bytearray.fromhex("de ad be ef 00")
바이트 배열을 반환하고 공백 구분 기호를 사용하거나 사용하지 않고 16진수 문자열을 읽습니다.
제가 올바르게 이해했다면, 당신은 binasci를 찾아야 합니다.생략하지 않는
import binascii
a='45222e'
s=binascii.unhexlify(a)
b=[ord(x) for x in s]
그런 바이트 문자열이 있다고 가정합니다.
"\x12\x45\x00\xAB"
그리고 바이트의 양과 바이트의 유형을 알고 있으며 이 접근 방식도 사용할 수 있습니다.
import struct
bytes = '\x12\x45\x00\xAB'
val = struct.unpack('<BBH', bytes)
#val = (18, 69, 43776)
형식 문자열의 시작 부분에 little endian('<' 문자 사용)을 지정했기 때문에 함수는 십진수 등가를 반환했습니다.
0x12 = 18
0x45 = 69
0xAB00 = 43776
B는 부호 없는 1바이트(8비트)와 같습니다.
H는 부호가 없는 2바이트(16비트)와 같습니다.
사용 가능한 문자 및 바이트 크기는 여기에서 확인할 수 있습니다.
장점은..
둘 이상의 바이트와 값의 엔디안을 지정할 수 있습니다.
단점..
처리하는 데이터의 유형과 길이를 알아야 합니다.
Python 표준 라이브러리에서 코덱 모듈을 사용할 수 있습니다.
import codecs
codecs.decode(hexstring, 'hex_codec')
다음과 같은 방법을 사용하여 이진 데이터를 포함하는 문자열을 작성할 수 있어야 합니다.
data = "fef0babe"
bits = ""
for x in xrange(0, len(data), 2)
bits += chr(int(data[x:x+2], 16))
이것은 아마도 가장 빠른 방법은 아니지만(많은 문자열이 추가됨) 코어 파이썬만 사용하면 매우 간단합니다.
좋은 라이너는 다음과 같습니다.
byte_list = map(ord, hex_string)
이렇게 하면 문자열의 각 문자에 대해 반복되고 ord() 함수를 통해 실행됩니다.python 2.6에서만 테스트되었으며 3.0+에 대해서는 그다지 확신하지 않습니다.
-조시
언급URL : https://stackoverflow.com/questions/5649407/how-to-convert-hexadecimal-string-to-bytes-in-python
'programing' 카테고리의 다른 글
여러 필드에 대한 Node.js 및 Mongoose 정규식 쿼리 (0) | 2023.05.12 |
---|---|
GitHub에서 분기된 repo 삭제 (0) | 2023.05.12 |
Xcode에서 보관 버튼이 회색으로 표시됨 (0) | 2023.05.12 |
Git에서 마스터에서 분기로 변경 사항 가져오기 (0) | 2023.05.12 |
Xcode 11에서 Swift Package Dependency를 삭제하는 방법은 무엇입니까? (0) | 2023.05.12 |