如何在python中将二进制内容解码为原始字符串内容?

2024-10-01 09:29:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串需要编码成二进制。获取像“11010011100…”这样的值字符串非常重要,因为稍后我需要将其插入灰度图像的最低像素位。(基本上我是在图像中隐藏消息。)我在Windows10上,使用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)) 

输出为:100100011001011101100110110011011111000001111111111111001011001100100

现在我想有一个方法来获取这个二进制流,并使原始消息如下所示:

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

谢谢大家的宝贵意见


Tags: to方法字符串图像format消息messagehello
1条回答
网友
1楼 · 发布于 2024-10-01 09:29:23
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

相关问题 更多 >