簡體   English   中英

Python:如何將一串二進制值(任意長度)轉換為十六進制數據?

[英]Python: How to turn a string of binary values (arbitrary length) into hex data?

我需要將類似於data = "00000111010110101"的字符串轉換為十六進制字符串,在此示例中,我需要使用“ 075A80”

您可能會注意到一些警告:

  • 前導零不應該被剝離,所以hex(int(data,2))對我不起作用
  • 如果len(data)%8!= 0,則應在字符串后附加零,以完整字節結尾

在搜索了這個論壇並找到不同的答案之后,這是我發現的一種方法,但是它看起來相當復雜,我希望其他人會看到一種更簡單的方法。

data_hex = "".join([ "%02X" % int("".join(a),2) for a in izip_longest(*(iter(data),)*8, fillvalue='0')])

謝謝!

編輯:數據的一些背景。 基礎數據純粹是位,它不表示整數或其他數值,因此前導零是相關的,必須在結果中表示。 同樣,在(右)端附加零不會改變我的用例中的“值”。

這是一個選擇:

>>> data = "00000111010110101"
>>> new_data = data + '0' * ((8 - len(data)) % 8)
>>> '{0:0{width}x}'.format(int(new_data, 2), width=len(new_data) / 4)
'075a80'

第一行附加零,因此長度為8的倍數,第二行格式化您的十六進制字符串。

將輸入內容0填充為8的倍數, 然后將其轉換為十六進制值:

multiple, remainder = divmod(len(data), 8)
if remainder:
    data = format(data, '<0{}'.format((multiple + 1) * 8))
result = format(int(data, 2), '0{}x'.format((multiple + 1) * 2))

輸出也會被填充,以使每個完整字節2個十六進制字符。

這給出:

>>> data = "00000111010110101"
>>> multiple, remainder = divmod(len(data), 8)
>>> if remainder:
...     data = format(data, '<0{}'.format((multiple + 1) * 8))
... 
>>> format(int(data, 2), '0{}x'.format((multiple + 1) * 2))
'075a80'

暫無
暫無

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

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