在Python中,如何将8位二进制数转换为ASCII字符?

时间:2012-03-01 01:46:54

标签: python character-encoding binary ascii

我试图从图片的蓝色像素中提取隐藏的消息,使得如果蓝色值是偶数,则表示二进制字符串中的0,如果蓝色值是奇数,则表示1在二进制字符串中。 8位二进制字符串各自代表一个字符,并且字符一起成为隐藏消息。

我已经将整个二进制字符串分解为8位二进制子字符串,但是我应该如何将这些“块”转换为ASCII字符呢? chr()和ord()以及unichr()似乎没有工作。是否有可用于将8位二进制子字符串直接转换为其对应的ASCII字符的方法或函数,或者我是否必须手动转换字符串?

import Image

def chunks(s, n):
    for start in range(0, len(s), n):
        yield s[start:start+n]

image = Image.open('image.png')
imagePixels = image.load()
imageWidth = image.size[0]
imageHeight = image.size[1]
blueValueEightString = "" 

for y in range(imageHeight):
    for x in range(imageWidth):
        blueValue = imagePixels[x, y][2]

        if blueValue%2 == 0:
            blueValue = 0
        else: 
            blueValue = 1

        blueValueString = str(blueValue)
        blueValueEightString += blueValueString

for chunk in chunks(blueValueEightString, 8):
    print chunk

1 个答案:

答案 0 :(得分:9)

您需要先将其转换为整数,然后您可以使用chr()来获取与该值相对应的ascii字符:

>>> binary_string = '01110111'
>>> int(binary_string, 2)
119
>>> chr(int(binary_string, 2))
'w'