我在网上多次搜索过,但我找不到转换二进制字符串变量的方法, X
X = "1000100100010110001101000001101010110011001010100"
成UTF-8字符串值。
我发现有些人正在使用
等方法b'message'.decode('utf-8')
但是,这种方法对我来说没有用,因为' b'据说是不存在的,我不知道如何更换“消息”#39;用变量。不仅如此,我还无法理解这种方法的工作原理。还有更好的选择吗?
那么如何将二进制字符串转换为文本字符串?
编辑:我也不介意ASCII解码
澄清:这是我想要发生的事情。
def binaryToText(z):
# Some code to convert binary to text
return (something here);
X="0110100001101001"
print binaryToText(X)
这将产生字符串......
hi
答案 0 :(得分:4)
看起来您正在尝试从每个字符的二进制字符串表示(位字符串)中解码ASCII字符。
您可以获取每个8个字符的块(一个字节),将其转换为整数,然后将其转换为chr()
的字符:
>>> X = "0110100001101001"
>>> print(chr(int(X[:8], 2)))
h
>>> print(chr(int(X[8:], 2)))
i
假设字符串中编码的值是ASCII,这将为您提供字符。您可以这样概括:
def decode_binary_string(s):
return ''.join(chr(int(s[i*8:i*8+8],2)) for i in range(len(s)//8))
>>> decode_binary_string(X)
hi
如果您想将其保留为原始编码,则无需进一步解码。通常你会将传入的字符串转换为Python unicode 字符串,这可以这样做(Python 2):
def decode_binary_string(s, encoding='UTF-8'):
byte_string = ''.join(chr(int(s[i*8:i*8+8],2)) for i in range(len(s)//8))
return byte_string.decode(encoding)
答案 1 :(得分:1)
为int
提供可选的基本参数以进行转换:
>> x = "1000100100010110001101000001101010110011001010100"
>> int(x, 2)
301456912901716
答案 2 :(得分:1)
在Python 2中,ascii编码(字节)字符串也是utf8编码(字节)字符串。 在Python 3中,(unicode)字符串必须编码到utf8编码的字节。解码的例子走错了路。
>>> X = "1000100100010110001101000001101010110011001010100"
>>> X.encode()
b'1000100100010110001101000001101010110011001010100'
仅包含数字“0”和“1”的字符串是一种特殊情况,适用相同的规则。
答案 3 :(得分:1)
将作为" 01" -string(二进制数字)的位转换为Python 3中的相应文本:
>>> bits = "0110100001101001"
>>> n = int(bits, 2)
>>> n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
'hi'
对于Python 2/3解决方案,请参阅Convert binary to ASCII and vice versa。