挺有意思的杂项,python将二进制转图片的时候出现的图片不像二维码,想看题解的时候发现网上的大部分题解都是直接转发,更有意思了。
题目是派大星的烦恼,给了我们一张粉红图片,放进010editor里面
可以看到这里就是题目里面所说的派大星的伤疤了。
题目里面的描述,说0X44和0X22是伤疤的两种细胞,另外的就是派大星的赘肉。很自然地我们可以想到这个是二进制对应的01
这里是d":
"DD"DD""""D"DD""""""DD"""DD"DD""D""DDD""D"D"DD""""""DD""D""""DD"D"D"DD""""D"DD""D"""DD"""""DDD""""D"DD"""D"""DD"""D""DD"D"D"DD"""DD""DD"D"D""DD""DD"DD"""D"""DD""DD"DD""D"D""DD"D"D"DD"""D"""DD"""D"DD""DD"""DD"D"D""DD"""D"DD""DD""DD"""""DDD""DD""DD"""D""DD""
我们将"为0 D为1,替换得到:
0110110000101100000011000110110010011100101011000000110010000110101011000010110010001100000111000010110001000110001001101010110001100110101001100110110001000110011011001010011010101100010001100010110011000110101001100010110011001100000111001100110001001100
刚好是16X16
猜测是一个黑白二维码
用python画一下:
from PIL import Image x = 16 y = 16 im = Image.new('RGB', (x, y)) white = (255, 255, 255) black = (0, 0, 0) with open('file.txt') as f: for i in range(x): ff = f.readline() for j in range(y): if ff[j] == '1': im.putpixel((i, j), black) else: im.putpixel((i, j), white) im.save("1.jpg")
得到的是什么玩意儿
先不说这个能不能反色变成二维码,就这个画质我估计想扫出来就够呛
于是换一个思路
刚好想到了反色,于是我们从二进制数入手,看能否反转,因为正向将二进制转字符串有不可见字符,我们尝试反着来。
反转之后看能否得到字符串
注意这里我反转相当于是将二进制数的排序变为了从后往前排
答案错误。
继续测试,从头开始将每八位二进制数倒序,得到字符串,成功
附上python2代码
(希望转发大佬题解的童鞋是在自己对题目有思考之后才转发的,而不是简单地看一遍题解,感觉自己懂了,这样不会有什么太大的进步,同时也指指自己)
def bin_to_str(s): return ''.join([chr(i) for i in [int(b, 2) for b in s.split(' ')]]) a = "01101100 00101100 00001100 01101100 10011100 10101100 00001100 10000110 10101100 00101100 10001100 00011100 00101100 01000110 00100110 10101100 01100110 10100110 01101100 01000110 01101100 10100110 10101100 01000110 00101100 11000110 10100110 00101100 11001100 00011100 11001100 01001100" a = a.split(' ') flag='' for i in a: test=i[::-1] flag+=bin_to_str(test) print flag