簡體   English   中英

將 Python str/unicode object 轉換為二進制/十六進制 blob

[英]Convert Python str/unicode object to binary/hex blob

有沒有一種簡單的方法可以將一些 str/unicode object 表示為一個大二進制數(或一個十六進制數)?

我一直在閱讀相關問題的一些答案,但它們都不適用於我的場景。

我嘗試使用STL中的struct模塊,但它沒有按預期工作。 字符,就像在二進制文件中一樣顯示為字符。

我在嘗試一些不可能的事情嗎?

例子:

def strbin(inp):
    # sorcery!
    return out

>> print strbin("hello")
# Any of these is cool (outputs are random keystrokes)
0b1001010101010000111001110001...
0xad9f...

你可以試試bitarray

>>> import bitarray
>>> b = bitarray.bitarray()
>>> b.fromstring('a')
>>> b
bitarray('01100001')
>>> b.to01()
'01100001'
>>> b.fromstring('pples')
>>> b.tostring()
'apples'
>>> b.to01()
'011000010111000001110000011011000110010101110011'

很簡單,不需要 pypi 的模塊:

def strbin(s):
    return ''.join(format(ord(i),'0>8b') for i in s)

您需要 Python 2.6+ 才能使用它。

這基本上是Ravi 的答案,但有一個小錯誤修復,所以所有功勞都歸功於他,但審稿人的共識是,這是一個太大的改變,不能僅僅進行編輯,應該是一個單獨的答案......不知道為什么。

def strhex(str):
    h=""
    for x in str:
        h=h+("0" + (hex(ord(x)))[2:])[-2:]
    return "0x"+h

不同之處在於,在第 4 行,您必須檢查字符是否小於 0x10,在這種情況下添加一個零,否則例如 0x1101 將變為 0x111。

def strhex(str):
    h=""
    for x in str:
        h=h+(hex(ord(x)))[2:]
    return "0x"+h

我寫的一個較大的漂亮打印 function 的切片以十六進制打印 ascii 代碼。 只是上一個答案 function 的 Pythonic 版本。 此外,它適用於具有單個數字 ascii 代碼的字符。

def strhex(string, start = '0x'):
    return start + ''.join(('{:x}'.format(ord(char))).zfill(2) for char in string)

暫無
暫無

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

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