将Python str / unicode对象转换为二进制/十六进制blob

时间:2011-07-18 02:06:10

标签: python string unicode binary

有没有一种简单的方法可以将一些str / unicode对象表示为一个大二进制数(或十六进制数)?

我一直在阅读相关问题的一些答案,但没有一个适用于我的情景。

我尝试使用 STL 中的struct模块,但它没有按预期工作。 Chars,就像二进制文件一样,显示为好字符。

我在尝试一些不可能的事情吗?

示例:

def strbin(inp):
    # sorcery!
    return out

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

5 个答案:

答案 0 :(得分:17)

您可以尝试bitarray

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

答案 1 :(得分:7)

非常简单,不需要来自pypi的模块:

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

你需要Python 2.6+来使用它。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我编写的一个较大的漂亮打印函数的切片以十六进制打印ascii代码。只是前一个答案功能的更多Pythonic版本。此外,它适用于具有单个数字ascii代码的字符。

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

答案 4 :(得分:0)

这基本上是Ravi's answer但是有一个小错误修正,所以对他来说都很有用,但是评论者之间的共识是,这只是一个太大的变化,只是做一个编辑而应该是一个单独的答案。 ..不明白为什么。

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

不同之处在于,在第4行中,您必须检查字符是否小于0x10,并且在这种情况下前置零,否则,例如, 0x1101变为0x111。