Hướng dẫn how to convert hex string to byte array in python? - làm cách nào để chuyển đổi chuỗi hex thành mảng byte trong python?

Tôi có một chuỗi hex dài đại diện cho một loạt các giá trị của các loại khác nhau. Tôi muốn chuyển đổi chuỗi hex này thành một mảng byte để tôi có thể chuyển từng giá trị ra và chuyển đổi nó thành kiểu dữ liệu phù hợp của nó.

Hỏi ngày 13 tháng 4 năm 2011 lúc 12:43Apr 13, 2011 at 12:43

Hướng dẫn how to convert hex string to byte array in python? - làm cách nào để chuyển đổi chuỗi hex thành mảng byte trong python?

RichardrichardRichard

Phù vàng 14.6K30 Huy hiệu bạc83 Huy hiệu đồng 108 Huy hiệu Đồng30 gold badges83 silver badges108 bronze badges

1

Giả sử chuỗi hex của bạn là một cái gì đó giống như

>>> hex_string = "deadbeef"

Chuyển đổi nó thành một bytearray (Python 3 và 2.7):

>>> bytearray.fromhex(hex_string)
bytearray(b'\xde\xad\xbe\xef')

Chuyển đổi nó thành đối tượng byte (Python 3):

>>> bytes.fromhex(hex_string)
b'\xde\xad\xbe\xef'

Lưu ý rằng

>>> bytearray.fromhex(hex_string)
bytearray(b'\xde\xad\xbe\xef')
1 là phiên bản bất biến của
>>> bytearray.fromhex(hex_string)
bytearray(b'\xde\xad\xbe\xef')
2.

Chuyển đổi nó thành một chuỗi (Python 2.7):

>>> hex_data = hex_string.decode("hex")
>>> hex_data
"\xde\xad\xbe\xef"

Hướng dẫn how to convert hex string to byte array in python? - làm cách nào để chuyển đổi chuỗi hex thành mảng byte trong python?

wjandrea

25.2k8 Huy hiệu vàng54 Huy hiệu bạc75 Huy hiệu Đồng8 gold badges54 silver badges75 bronze badges

Đã trả lời ngày 15 tháng 4 năm 2011 lúc 22:32Apr 15, 2011 at 22:32

Tzottzottzot

89,8K29 Huy hiệu vàng138 Huy hiệu bạc202 Huy hiệu đồng29 gold badges138 silver badges202 bronze badges

2

Có một chức năng tích hợp trong bytearray thực hiện những gì bạn dự định.

bytearray.fromhex("de ad be ef 00")

Nó trả về một bytearray và nó đọc các chuỗi hex có hoặc không có dấu phân cách không gian.

Đã trả lời ngày 13 tháng 11 năm 2012 lúc 15:01Nov 13, 2012 at 15:01

Kuggkuggkugg

1.6691 Huy hiệu vàng10 Huy hiệu bạc5 Huy hiệu đồng1 gold badge10 silver badges5 bronze badges

2

miễn là tôi hiểu chính xác, bạn nên tìm Binascii.unhexlify

import binascii
a='45222e'
s=binascii.unhexlify(a)
b=[ord(x) for x in s]

Đã trả lời ngày 13 tháng 4 năm 2011 lúc 12:51Apr 13, 2011 at 12:51

BruceBruceBruce

7.0741 Huy hiệu vàng24 Huy hiệu bạc42 Huy hiệu đồng1 gold badge24 silver badges42 bronze badges

1

Giả sử bạn có một chuỗi byte như vậy

"\ x12 \ x45 \ x00 \ xab"

Và bạn biết số lượng byte và loại của chúng bạn cũng có thể sử dụng phương pháp này

import struct

bytes = '\x12\x45\x00\xAB'
val = struct.unpack('<BBH', bytes)

#val = (18, 69, 43776)

Như tôi đã chỉ định Little Endian (sử dụng '

0x12 = 18

0x45 = 69

0xAB00 = 43776

B bằng một byte (8 bit) không dấu

H bằng hai byte (16 bit) không dấu

Có thể tìm thấy nhiều ký tự và kích thước byte hơn ở đây

Những ưu điểm là..

Bạn có thể chỉ định nhiều hơn một byte và endian của các giá trị

Disadvantages..

Bạn thực sự cần biết loại và độ dài của dữ liệu mà bạn giao dịch với

Đã trả lời ngày 10 tháng 9 năm 2012 lúc 6:35Sep 10, 2012 at 6:35

HovohovoHovo

4594 Huy hiệu bạc9 Huy hiệu Đồng4 silver badges9 bronze badges

2

Bạn có thể sử dụng mô -đun Codecs trong thư viện tiêu chuẩn Python, tức là

import codecs

codecs.decode(hexstring, 'hex_codec')

Varantir

6.3846 Huy hiệu vàng33 Huy hiệu bạc55 Huy hiệu Đồng6 gold badges33 silver badges55 bronze badges

Đã trả lời ngày 22 tháng 8 năm 2019 lúc 11:09Aug 22, 2019 at 11:09

Velsimvelsimvelsim

5551 Huy hiệu vàng8 Huy hiệu bạc17 Huy hiệu đồng1 gold badge8 silver badges17 bronze badges

Bạn sẽ có thể xây dựng một chuỗi giữ dữ liệu nhị phân bằng cách sử dụng một cái gì đó như:

data = "fef0babe"
bits = ""
for x in xrange(0, len(data), 2)
  bits += chr(int(data[x:x+2], 16))

Đây có lẽ không phải là cách nhanh nhất (nhiều chuỗi nối), nhưng khá đơn giản chỉ sử dụng Python Core.

Đã trả lời ngày 13 tháng 4 năm 2011 lúc 12:52Apr 13, 2011 at 12:52

Khả năng thư giãnunwind

385K64 Huy hiệu vàng464 Huy hiệu bạc595 Huy hiệu Đồng64 gold badges464 silver badges595 bronze badges

def hex2bin(s):
    hex_table = ['0000', '0001', '0010', '0011',
                 '0100', '0101', '0110', '0111',
                 '1000', '1001', '1010', '1011',
                 '1100', '1101', '1110', '1111']
    bits = ''
    for i in range(len(s)):
        bits += hex_table[int(s[i], base=16)]
    return bits

Đã trả lời ngày 30 tháng 6 năm 2013 lúc 21:26Jun 30, 2013 at 21:26

Một lớp lót tốt là:

>>> bytearray.fromhex(hex_string)
bytearray(b'\xde\xad\xbe\xef')
0

Điều này sẽ lặp lại trên mỗi char trong chuỗi và chạy nó thông qua hàm ord (). Chỉ được thử nghiệm trên Python 2.6, không quá chắc chắn về 3.0+.

-Josh

Đã trả lời ngày 13 tháng 4 năm 2011 lúc 12:49Apr 13, 2011 at 12:49

Karlwkarlwkarlw

6624 Huy hiệu bạc13 Huy hiệu Đồng4 silver badges13 bronze badges

3