![](/img/trans.png)
[英]Am I using encode correctly/incorrectly in Python 3 to convert a string into bytes?
[英]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.