[英]Python: How to turn a string of binary values (arbitrary length) into hex data?
我需要將類似於data = "00000111010110101"
的字符串轉換為十六進制字符串,在此示例中,我需要使用“ 075A80”
您可能會注意到一些警告:
在搜索了這個論壇並找到不同的答案之后,這是我發現的一種方法,但是它看起來相當復雜,我希望其他人會看到一種更簡單的方法。
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.