将ascii转换为二进制文件并写入二进制文件 - PYTHON 3.x.

时间:2013-10-23 11:08:34

标签: python python-3.x

我想读取二进制文件(如.bmp或.jpg)并将每个二进制数据转换为ascii并执行乘法(如ascii * 2)并转换回二进制格式并写入新文件。

我编写的程序如下

    filename = input("enter file to read: ")
    readfile = filename + ".bmp"
    writefilebmp = filename + '1' + ".bmp"
    fr = open(readfile,"rb");
    fwbmp = open(writefilebmp,"wb");
    bytes_read = fr.read(1024)
    for b in bytes_read:
        print(b,end='')
        data = b*2;
        fwbmp.write(data)
    fr.close()
    fwbmp.close()

但我收到以下错误

TypeError:'int'不支持缓冲区接口

注意:一旦我解决了,我将修改代码以跳过bmp或jpeg标题

修饰

    filename = input("enter file to read: ")
    readfile = filename + ".bmp"
    writefilebmp = filename + '1' + ".bmp"
    fr = open(readfile,"rb");
    fwbmp = open(writefilebmp,"wb");
    bytes_read = fr.read(20)
    for b in bytes_read:
        print(b,end='')
        data = b*2;
        fwbmp.write(bytes(data))
    fr.close()
    fwbmp.close()

1 个答案:

答案 0 :(得分:2)

你循环遍历字节,它给你整数。转换回字节以写入二进制文件:

fwbmp.write(bytes([data % 256]))

此处需要模256以将结果int值限制为允许值。您还可以使用min()

将值设置为255
fwbmp.write(bytes([min(data, 255)]))

如果你的加倍导致溢出,你可以写两个字节:

if data > 255:
    fwbmp.write(bytes(divmod(data, 256)))
else:
    fwbmp.write(bytes([data]))

或总是产生2个字节,第一个字节是0x010x00

fwbmp.write(bytes(divmod(data, 256)))

你需要根据输出来决定你想要'加倍'的含义。