python中如何将二进制内容解码为原始字符串内容?
How to decode binary content to original string content in python?
我有一个字符串需要编码成二进制。我得到一个像'11010011100 ...'这样的值字符串非常重要,因为稍后我需要将它插入灰度图像的最低像素位。 (基本上我在图像中隐藏了一条消息。)我在 windows 10,使用 python 3.6.8.
按照这个link我写了这个方法来编码它:
def message2bin(msg):
"""
Converts a msg to binary format
:param msg: message to convert
:return: binary content of message in string format
"""
message_bin = ''.join(format(x, 'b') for x in bytearray(msg, 'utf-8'))
return message_bin
msg = 'Hello world'
print(message2bin(msg))
输出为:1001000110010111011001101100110111110000011101111101111111001011011001100100
现在我想要一个方法来获取这个二进制流并将原始消息制作成这样:
bin2message(message2bin(msg))
>> Hello world
我尝试了以下方法:
print(bytearray(message2bin(msg), 'utf-8').decode(encoding))
但是输出又是:
>> 1001000110010111011001101100110111110000011101111101111111001011011001100100
我也不明白为什么二进制信息的长度是76而不是78?首先,它将每个字符分成 7 位而不是 8 位,我不明白为什么。即使有 7 位,'Hello world' 也有 11 个字符,所以我期望长度为 77,但它给了我 76?有人可以给我解释一下吗?
print(len(message2bin(msg)))
>> 76
感谢大家的宝贵意见。
def msgencoder(msg):
return format(int(bytes(msg, 'utf-8').hex(), base=16), 'b')
def msgdecoder(msg):
return bytes.fromhex(format(int(msg, base=2), 'x')).decode('utf-8')
a = msgencoder('hello world')
b = msgdecoder(a)
print(b)
hello world
我有一个字符串需要编码成二进制。我得到一个像'11010011100 ...'这样的值字符串非常重要,因为稍后我需要将它插入灰度图像的最低像素位。 (基本上我在图像中隐藏了一条消息。)我在 windows 10,使用 python 3.6.8.
按照这个link我写了这个方法来编码它:
def message2bin(msg):
"""
Converts a msg to binary format
:param msg: message to convert
:return: binary content of message in string format
"""
message_bin = ''.join(format(x, 'b') for x in bytearray(msg, 'utf-8'))
return message_bin
msg = 'Hello world'
print(message2bin(msg))
输出为:1001000110010111011001101100110111110000011101111101111111001011011001100100
现在我想要一个方法来获取这个二进制流并将原始消息制作成这样:
bin2message(message2bin(msg))
>> Hello world
我尝试了以下方法:
print(bytearray(message2bin(msg), 'utf-8').decode(encoding))
但是输出又是:
>> 1001000110010111011001101100110111110000011101111101111111001011011001100100
我也不明白为什么二进制信息的长度是76而不是78?首先,它将每个字符分成 7 位而不是 8 位,我不明白为什么。即使有 7 位,'Hello world' 也有 11 个字符,所以我期望长度为 77,但它给了我 76?有人可以给我解释一下吗?
print(len(message2bin(msg)))
>> 76
感谢大家的宝贵意见。
def msgencoder(msg):
return format(int(bytes(msg, 'utf-8').hex(), base=16), 'b')
def msgdecoder(msg):
return bytes.fromhex(format(int(msg, base=2), 'x')).decode('utf-8')
a = msgencoder('hello world')
b = msgdecoder(a)
print(b)
hello world