簡體   English   中英

如何在 Python 3.7 中編碼字符串數據(轉換為字節)

[英]How can I encode string data (convert to bytes) in Python 3.7

我有個問題。

我得到如下數據:

hex_num='0EE6'
data_decode=str(codecs.decode(hex_num, 'hex'))[(0):(80)]
print(data_decode)
>>>b'\x0e\xe6'

我想像這樣編碼:

data_enc=str(codecs.encode(data_decode, 'hex'))[(2):(6)]
print(str(int(data_enc,16)))
>>>TypeError: encoding with 'hex' codec failed (TypeError: a bytes-like object is required, not 'str')

如果我寫這個:

data_enc=str(codecs.encode(b'\x0e\xe6', 'hex'))[(2):(6)]
print(str(int(data_enc,16)))
>>>3814

它會返回我想要的數字(3814)

請幫忙。

您可以像這樣刪除引號: data = b'\x0e\xe6'

Python 3 文檔指出:

字節文字總是以'b'或'B'為前綴; 它們生成 bytes 類型而不是 str 類型的實例。 它們可能只包含 ASCII 字符; 數值為 128 或更大的字節必須用轉義表示。

b在字符串中時,它不會像字符串文字前綴那樣表現,因此您必須刪除引號才能使文字起作用,並將文本直接轉換為字節。

更正的代碼:

import codecs
data = b'\x0e\xe6'
data_enc=str(codecs.encode(data, 'hex'))[(2):(6)]
print(str(int(data_enc,16)))

Output:

3814

要將十六進制字符串更改為二進制數據,則使用binascii.unhexlify是一種方便的方法。 例如:

>>> hex_num='0EE6'
>>> import binascii
>>> binascii.unhexlify(hex_num)
b'\x0e\xe6'

然后將二進制數據轉換為 integer,使用int.from_bytes可以控制數據的字節順序以及是否簽名。 例如:

>>> bytes_data = b'\x0e\xe6'
>>> int.from_bytes(bytes_data, byteorder='little', signed=False)
58894
>>> int.from_bytes(bytes_data, byteorder='big', signed=False)
3814

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM