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

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

bin(reduce(lambda x,y:256*x+y,(“hello”中c的ord(c)),0))

这将产生:

0B110100001110010110110001101100011111

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

对于Python 2上[-~]范围内的ASCII字符:

&gt&燃气轮机&燃气轮机;导入binascii
&燃气轮机&燃气轮机&燃气轮机;bin(int(binascii.hexlify('hello'),16))
“0B110100001100110110001101100011111”

反过来说:

&gt&燃气轮机&燃气轮机;n=int('0B110100001110010110110001101100011111',2)
&燃气轮机&燃气轮机&燃气轮机;binascii.unexlify(“%x”%n)
“你好”

在Python 3.2+中:

&gt&燃气轮机&燃气轮机;bin(int.from_字节('hello'.encode(),'big'))
“0B110100001100110110001101100011111”

反过来说:

&gt&燃气轮机&燃气轮机;n=int('0B110100001110010110110001101100011111',2)
&燃气轮机&燃气轮机&燃气轮机;n、 to_字节((n.bit_length()+7)//8,‘big’).decode()
“你好”

要支持Python 3中的所有Unicode字符,请执行以下操作:

def text_to_位(text,encoding='utf-8',errors='subrogatepass'):
bits=bin(int.from_字节(text.encode(编码,错误),'big'))[2:]
返回位.zfill(8*((len(位)+7)//8))
def text_from_位(位,编码='utf-8',错误='surrogatepass'):
n=int(位,2)
返回n.to_字节((n.bit_length()+7)//8,“big”)。解码(编码,错误)或“\0”

以下是与Python 2/3兼容的单源版本:

导入binascii
def text_至_位(text,encoding=’utf-8’,errors=’progateTPass’):
bits=bin(int(binascii.hexlify(text.encode(编码,错误)),16))[2:]
返回位.zfill(8*((len(位)+7)//8))
def text_from_位(位,编码=’utf-8’,错误=’surrogatepass’):
n=int(位,2)
返回整数字节(n)。解码(编码,错误)
def Int2字节(i):
十六进制字符串=“%x”%i
n=长度(十六进制字符串)
返回binascii.unhexlify(十六进制字符串.zfill(n+(n&1)))

范例

&gt&燃气轮机&燃气轮机;文本\u到\u位('hello')
'0110100001100101011011000110110001101111'
&燃气轮机&燃气轮机&燃气轮机;来自_位的文本_('11010000110001101101110001101100011111')==u'hello'
符合事实的

发表评论