zoukankan      html  css  js  c++  java
  • python把任意文件转换成1010样子的字符串,加转回来。。。突然觉得加密解密很好玩的说。。

    起源于在这里问的一个问题:http://segmentfault.com/q/1010000000182052

    最近迷上了玩python challenge,就想到要整个这个玩意,结果想来简单作起来难。。。不过好处是梳理清楚了很多模模糊糊的地方。

    废话不说,先上代码:

    # path参数:要转换的文件的路径
    def convertFileToOneAndZero(path):
        f = open(path,'rb')
        src = f.read()
        print len(src)
    
        result = []
        for i in src:
            temp = bin(ord(i))[2:] # bin()函数输出的结果前面带0b两个字符,这里不需要所以去掉它
            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()

    用二进制形式打开文件后,read()出来的字符串叫做binary string,二进制字符串,指的是这串字符串二进制层面上和文件完全相同,把它写入到另一个二进制文件中就等于拷贝了一份。而不是指表现形式上的二进制(101010101)。

    然后就是把这个字符串里的每个字符用ord()转换数字,再转成二进制表现形式的字符串就可以了。要注意的是python的bin()函数不会自己补足8位。

    为什么不补足八位要小心呢?因为一个字符占8bit,前面几位就算是0也不能无视,不补齐的话生成的字符串就不对了。转换回来的时候文件就会出错。转换完的1010的长度应该是binary string长度的八倍。

    好奇一下。。。binary string(二进制字符串)是指和它代表的文件在二进制层面上内容相同的字符串,那1010这种字符串又怎么称呼呢?
    stackoverflow上很多问题似乎都是用1s and 0s来表示。。。有没有再文艺清新点的表达方式?。。

  • 相关阅读:
    解决Fatal error: Allowed memory size of 33554432 bytes exhausted
    VS2008 LINK : fatal error LNK1000: Internal error during IncrBuildImage
    天天算法01——左旋转字符串
    二叉排序数的判定
    数据结构绪论思维导图
    痛苦!很痛苦!
    【转】qt交叉环境编译
    [转]linux联想Y450屏幕亮度调节
    【转载】arm指令
    HTTP请求和响应——GET与POST区别以及SOAP(网络整理)
  • 原文地址:https://www.cnblogs.com/alanalan/p/2978007.html
Copyright © 2011-2022 走看看