2016-08-08 22 views
5

Tôi đang cố gắng để unpack một chuỗi thập lục phân thành một đôi trong Python.Đọc hex với python float chính xác kép

Khi tôi cố gắng giải nén như sau:

unpack('d', "4081637ef7d0424a"); 

tôi nhận được lỗi sau:

struct.error: unpack requires a string argument of length 8 

này không làm cho rất nhiều ý nghĩa với tôi bởi vì một đôi dài 8 byte, và

2 nhân vật = 1 giá trị hex = 1 byte

01.

Vì vậy, về bản chất, một đôi 8 byte dài sẽ là một chuỗi ký tự 16 ký tự.

Bất kỳ con trỏ nào về việc giải nén hex này thành gấp đôi sẽ được đánh giá cao.

+0

"Chuỗi" được mong đợi bởi 'struct.unpack' không phải là một chuỗi hex, đó là các byte thô. Trong Python3, nó sẽ là 'byte', không phải' str'. Sử dụng 'bytearray.fromhex' hoặc chỉ' str.decode', xem câu trả lời của Sven Marnach. – L3viathan

Trả lời

5

Bạn cần phải chuyển đổi các chữ số hex thành một chuỗi nhị phân đầu tiên:

struct.unpack('d', "4081637ef7d0424a".decode("hex")) 

hoặc

struct.unpack('d', binascii.unhexlify("4081637ef7d0424a")) 

Phiên bản thứ hai làm việc trong cả hai Python 2 và 3, tên cũ chỉ có trong Python 2

+0

@ L3viathan 'binascii' không yêu cầu thư viện của bên thứ ba. Nó là một phần của thư viện chuẩn của Python, và trên CPython nó thậm chí được biên dịch thành trình thông dịch, do đó, nó được nhập khẩu khi bắt đầu thông dịch viên. –

0

Hãy thử điều này:

a = "\x40\x81\x63\x7e\xf7\xd0\x42\x4a" 
unpack('d', a); 
Các vấn đề liên quan