我想读取二进制文件(如.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()
答案 0 :(得分:2)
你循环遍历字节,它给你整数。转换回字节以写入二进制文件:
fwbmp.write(bytes([data % 256]))
此处需要模256以将结果int值限制为允许值。您还可以使用min()
fwbmp.write(bytes([min(data, 255)]))
如果你的加倍导致溢出,你可以写两个字节:
if data > 255:
fwbmp.write(bytes(divmod(data, 256)))
else:
fwbmp.write(bytes([data]))
或总是产生2个字节,第一个字节是0x01
或0x00
:
fwbmp.write(bytes(divmod(data, 256)))
你需要根据输出来决定你想要'加倍'的含义。