有没有一种简单的方法可以将一些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...
答案 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。