使用以下代码获取字符串并将其转换为二进制:
bin(reduce(lambda x, y: 256*x+y, (ord(c) for c in 'hello'), 0))
这将输出以下内容:
0b110100001100101011011000110110001101111
如果我把它放入this site (在右边的站点),我会得到我的hello
消息。我想知道它用的是什么方法。我知道我可以将二进制字符串拼接成8,然后将其与bin(ord(character))
或其他方式的对应值进行匹配。真的在寻找更简单的东西。
发布于 2011-09-13 13:23:37
我不确定您认为除了逐个字符之外还能做什么--这本质上是一个逐个字符的操作。当然有代码可以帮你做到这一点,但没有比逐个字符更“简单”的方法了。
首先,您需要去掉0b
前缀,并对字符串进行左0填充,这样它的长度就可以被8整除,这样就可以很容易地将位字符串分割成字符:
bitstring = bitstring[2:]
bitstring = -len(bitstring) % 8 * '0' + bitstring
然后将字符串分成8个二进制数字的块,将它们转换为ASCII字符,并将它们连接回一个字符串:
string_blocks = (bitstring[i:i+8] for i in range(0, len(bitstring), 8))
string = ''.join(chr(int(char, 2)) for char in string_blocks)
如果你真的想把它当作一个数字,你仍然必须考虑这样一个事实:如果你想从左到右而不是从右到左,最左边的字符最多有七位数长。
发布于 2013-05-27 23:35:22
这是我解决你的任务的方法:
str = "0b110100001100101011011000110110001101111"
str = "0" + str[2:]
message = ""
while str != "":
i = chr(int(str[:8], 2))
message = message + i
str = str[8:]
print message
发布于 2015-09-03 17:24:55
如果您不想导入任何文件,可以使用以下命令:
with open("Test1.txt", "r") as File1:
St = (' '.join(format(ord(x), 'b') for x in File1.read()))
StrList = St.split(" ")
将文本文件转换为二进制文件。
您可以使用此命令将其转换回字符串:
StrOrgList = StrOrgMsg.split(" ")
for StrValue in StrOrgList:
if(StrValue != ""):
StrMsg += chr(int(str(StrValue),2))
print(StrMsg)
希望这对我有帮助,我已经使用了一些自定义的加密来通过TCP发送。
https://stackoverflow.com/questions/7396849
复制相似问题