84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
最近迷上了玩python challenge,就想写个能实现如题功能的玩意,无奈脑袋不够用。。。
另,希望能够以一个图片为例,再将字符串转回原来原来的图片。多谢!
(另,最好是python,不过java\c\c++都可以)
欢迎选择我的课程,让我们一起见证您的进步~~
感谢 @xavierskip 的评论!
终于摸出来了。。收获良多。
用二进制形式打开文件后,read()出来的字符串叫做binary string,二进制字符串,指的是这串字符串二进制层面上和文件完全相同,把它写入到另一个二进制文件中就等于拷贝了一份。而不是指表现形式上的二进制(101010101)。
然后就是把这个字符串里的每个字符用ord()转换数字,再转成二进制表现形式的字符串就可以了。要注意的是python的bin()函数不会自己补足8位。
好奇一下。。。binary string(二进制字符串)是指和它代表的文件在二进制层面上内容相同的字符串,那1010这种字符串又怎么称呼呢? stackoverflow上很多问题似乎都是用1s and 0s来表示。。。有没有再文艺清新点的表达方式?。。
巩固学习,写了相互转换的函数:
# path参数:要转换的文件的路径 def convertFileToOneAndZero(path): f = open(path,'rb') src = f.read() print len(src) result = [] for i in src: temp = bin(ord(i))[2:] temp = '0' * (8-len(temp)) + temp result.append(temp) return ''.join(result) # src参数:1010字符串 # path参数:输出文件的路径 def convertOneAndZeroToFile(src, path): result = [] for i in range(0, len(src), 8): result.append(chr(int(src[i:i+8], 2))) f = open(path, 'wb') f.write(''.join(result)) f.close()
result = [] for i in src: temp = bin(ord(i))[2:] temp = '0' * (8-len(temp)) + temp result.append(temp) return ''.join(result)
这段可以一行搞定:
return ''.join([ '{0:08b}'.format(ord(i)) for i in src ])
string.format的例子可以看看 http://docs.python.org/2/library/stri... 字符串拼接的小技巧可以看 http://wiki.python.org/moin/PythonSpe...,这篇文档里面还有不少其它优化技巧
string.format
感谢 @xavierskip 的评论!
终于摸出来了。。收获良多。
用二进制形式打开文件后,read()出来的字符串叫做binary string,二进制字符串,指的是这串字符串二进制层面上和文件完全相同,把它写入到另一个二进制文件中就等于拷贝了一份。而不是指表现形式上的二进制(101010101)。
然后就是把这个字符串里的每个字符用ord()转换数字,再转成二进制表现形式的字符串就可以了。要注意的是python的bin()函数不会自己补足8位。
好奇一下。。。binary string(二进制字符串)是指和它代表的文件在二进制层面上内容相同的字符串,那1010这种字符串又怎么称呼呢?
stackoverflow上很多问题似乎都是用1s and 0s来表示。。。有没有再文艺清新点的表达方式?。。
巩固学习,写了相互转换的函数:
这段可以一行搞定:
string.format
的例子可以看看 http://docs.python.org/2/library/stri...字符串拼接的小技巧可以看 http://wiki.python.org/moin/PythonSpe...,这篇文档里面还有不少其它优化技巧