首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将二进制代码转换为ASCII代码,反之亦然

将二进制代码转换为ASCII代码,反之亦然
EN

Stack Overflow用户
提问于 2011-09-13 12:34:14
回答 6查看 281.3K关注 0票数 89

使用以下代码获取字符串并将其转换为二进制:

代码语言:javascript
复制
bin(reduce(lambda x, y: 256*x+y, (ord(c) for c in 'hello'), 0))

这将输出以下内容:

代码语言:javascript
复制
0b110100001100101011011000110110001101111

如果我把它放入this site (在右边的站点),我会得到我的hello消息。我想知道它用的是什么方法。我知道我可以将二进制字符串拼接成8,然后将其与bin(ord(character))或其他方式的对应值进行匹配。真的在寻找更简单的东西。

EN

回答 6

Stack Overflow用户

发布于 2011-09-13 13:23:37

我不确定您认为除了逐个字符之外还能做什么--这本质上是一个逐个字符的操作。当然有代码可以帮你做到这一点,但没有比逐个字符更“简单”的方法了。

首先,您需要去掉0b前缀,并对字符串进行左0填充,这样它的长度就可以被8整除,这样就可以很容易地将位字符串分割成字符:

代码语言:javascript
复制
bitstring = bitstring[2:]
bitstring = -len(bitstring) % 8 * '0' + bitstring

然后将字符串分成8个二进制数字的块,将它们转换为ASCII字符,并将它们连接回一个字符串:

代码语言:javascript
复制
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)

如果你真的想把它当作一个数字,你仍然必须考虑这样一个事实:如果你想从左到右而不是从右到左,最左边的字符最多有七位数长。

票数 10
EN

Stack Overflow用户

发布于 2013-05-27 23:35:22

这是我解决你的任务的方法:

代码语言:javascript
复制
str = "0b110100001100101011011000110110001101111"
str = "0" + str[2:]
message = ""
while str != "":
    i = chr(int(str[:8], 2))
    message = message + i
    str = str[8:]
print message
票数 2
EN

Stack Overflow用户

发布于 2015-09-03 17:24:55

如果您不想导入任何文件,可以使用以下命令:

代码语言:javascript
复制
with open("Test1.txt", "r") as File1:
St = (' '.join(format(ord(x), 'b') for x in File1.read()))
StrList = St.split(" ")

将文本文件转换为二进制文件。

您可以使用此命令将其转换回字符串:

代码语言:javascript
复制
StrOrgList = StrOrgMsg.split(" ")


for StrValue in StrOrgList:
    if(StrValue != ""):
        StrMsg += chr(int(str(StrValue),2))
print(StrMsg)

希望这对我有帮助,我已经使用了一些自定义的加密来通过TCP发送。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7396849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档