簡體   English   中英

正確地從十六進制字符串轉換為字節數組

[英]Correctly going from a Hexadecimal string to a byte array

我有一個由以下字節組成的十六進制字符串:

['0x17','0x9','0x5','0x1f','0x0','0x4','0x16','0x0','0x28','0x53','0x1c','0x8',' 0x12','0x11','0x40','0xe','0x54','0x3b','0x6','0x1e','0x45','0x49','0xa','0x45','0xe' ,'0x1c','0x1f','0x59','0x41','0x6','0x4f','0x59','0xb','0x16','0x2','0x44','0x53','為0x1' ]

十六進制字符串如下所示:

'17951f0416028531c8121140e543b61e4549a45e1c1f594164f59b16244531'

如何檢索原始字節數組?

在python 3.x中:

bytes.fromhex('17951f0416028531c8121140e543b61e4549a45e1c1f594164f59b16244531')

回報

B '\\ X17 \\ X95 \\ X1F \\ X04 \\ X16 \\ X02 \\ x851 \\ xc8 \\ X12 \\ X11 @ \\ xe5C \\ XB6 \\ x1eEI \\ XA4 ^ \\ X1C \\ x1fYAd \\ XF5 \\ x9b \\ X16 $ E1',

並在python 2.x中: str('17951f0416028531c8121140e543b61e4549a45e1c1f594164f59b16244531').decode('hex')返回

B '\\ X17 \\ X95 \\ X1F \\ X04 \\ X16 \\ X02 \\ x851 \\ xc8 \\ X12 \\ X11 @ \\ xe5C \\ XB6 \\ x1eEI \\ XA4 ^ \\ X1C \\ x1fYAd \\ XF5 \\ x9b \\ X16 $ E1'。

兩者都是完全錯誤的。 這些bytes.fromhex和decode('hex')一次都讀取2個字節,因此'0x9'和'0x5'被讀為'0x95'。 有沒有什么辦法解決這一問題?

請注意,我無法控制原始十六進制字符串的生成。 干杯。

在您的字符串編碼中,已合並了幾對字節。 確保每個字節由字符串中的兩個字符表示,您將獲得所需的內容:

In [6]: s
Out[6]: '1709051f0004160028531c081211400e543b061e45490a450e1c1f5941064f590b1602445301'

In [7]: bytes.fromhex(s)
Out[7]: b'\x17\t\x05\x1f\x00\x04\x16\x00(S\x1c\x08\x12\x11@\x0eT;\x06\x1eEI\nE\x0e\x1c\x1fYA\x06OY\x0b\x16\x02DS\x01'

在不知道字符串代表什么樣的信息的情況下,沒有確定丟失的0應該添加到何處的先驗方法。

暫無
暫無

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

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