gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:34:08 24 4
gpt4 key购买 nike

我想读取二进制文件(如 .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()

但是我收到以下错误

类型错误:'int'不支持缓冲区接口(interface)

注意:一旦找到解决方案,我将修改代码以跳过 bmp 或 jpeg header

已修改

    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()

最佳答案

您正在循环字节,这会为您提供整数。转换回字节以写入二进制文件:

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 个字节,无论第一个字节是 0x01 还是 0x00:

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

您需要决定“加倍”在输出方面的含义。

关于python - 将 ascii 转换为二进制并写入二进制文件 - PYTHON 3.x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19540034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com