molinchz 发表于 2021-11-2 20:20:31

hrpzcf 发表于 2021-10-31 16:36
知道转换规律就不难,不知道转换规律,不管是不是中文都麻烦

大佬,图1 是ascii 码,然后写入是把ascii转成16进制写成的hex文件 , 是这样吗

hrpzcf 发表于 2021-11-2 21:45:41

molinchz 发表于 2021-11-2 20:20
大佬,图1 是ascii 码,然后写入是把ascii转成16进制写成的hex文件 , 是这样吗

不是。没有所谓的hex文件,只有文本文件和二进制文件(实际上这两者本质也是一样)。生成二进制文件,原理就是以二进制写(wb覆盖,ab追加)的方式新建文件,然后把字节码写入到文件中。字节码哪来呢,按照前几楼的例子,就是把字符串先按某编码格式(比如ASCII)编码成字节码,再按你的规则对字节码进行修改(比如在前面增加两个字节01 00,后面以00字节补够16字节),这就是要写入二进制文件的字节码。

molinchz 发表于 2021-11-12 17:12:13

hrpzcf 发表于 2021-11-2 21:45
不是。没有所谓的hex文件,只有文本文件和二进制文件(实际上这两者本质也是一样)。生成二进制文件,原理 ...

谢谢老师,我又来了,
lc_path=D:\PycharmProjects
for com_num in range(393000, 393002, 1):
    with open(f"lc_path '+' {com_num}.cis", "wb") as cisf:

这个路径怎样指定 ,我一直拼不对!!

hrpzcf 发表于 2021-11-12 18:09:57

molinchz 发表于 2021-11-12 17:12
谢谢老师,我又来了,
lc_path=D:\PycharmProjects
for com_num in range(393000, 393002, 1):


import os

lc_path = r"D:\PycharmProjects"
# 假设你想拼接成这样:"D:\PycharmProjects\393001.cis"
# 首先文件名是 f"{com_num}.cis"
# 然后再用 os.path.join 将其与 lc_path 组合成路径:os.path.join(lc_path, f"{com_num}.cis")
# 当然你也可以这样:rf"{lc_path}\{com_num}.cis",但为了保证不同平台兼容性建议用上面方法
for com_num in range(393000, 393002, 1):
    # print(rf"{lc_path}\{com_num}.cis")
    print(os.path.join(lc_path, f"{com_num}.cis"))
    # with open(f"lc_path '+' {com_num}.cis", "wb") as cisf:
    #   pass

molinchz 发表于 2021-11-12 18:19:22

hrpzcf 发表于 2021-11-12 18:09


老师,这个lc_path是接收地址的一个变量,能用加 r这样写吗

molinchz 发表于 2021-11-12 18:24:53

本帖最后由 molinchz 于 2021-11-12 18:27 编辑

,我查到openos.path.join(lc_path, f"{com_num}.cis")这个可以刚才试错了

molinchz 发表于 2021-11-14 13:15:17

hrpzcf 发表于 2021-11-12 18:09


请教下老师,我用hex(4565),得到 16进制11d5    ,但存放的是d511,也就是高低位交换了,而且python 里面比如hex(2016 ) 得到是0x7e0,高位的07转成7了,这样的,存放到 .cis 文件 中0x7 还能 是07吗?要补码操作吗,高低位交换是分离在合成 ,怎样实现。谢谢

hrpzcf 发表于 2021-11-14 14:02:51

molinchz 发表于 2021-11-14 13:15
请教下老师,我用hex(4565),得到 16进制11d5    ,但存放的是d511,也就是高低位交换了,而且py ...

molinchz 发表于 2021-11-14 13:15
请教下老师,我用hex(4565),得到 16进制11d5    ,但存放的是d511,也就是高低位交换了,而且py ...

>>> n = 4565
>>> x = b"\xd5\x11"
>>> b = b"\x11\xd5"
>>> n.to_bytes(2, "big")
b'\x11\xd5'
>>> n.to_bytes(2, "little")
b'\xd5\x11'
>>> int.from_bytes(x, "little")
4565
>>> int.from_bytes(b, "big")
4565
>>> (2016).to_bytes(2, "big")
b'\x07\xe0'
>>>
以上就是整数、字节码分别以大小端转换的过程(用struct模块也可以),你的具体需求还是开个新贴把用例和想要的结果写清楚吧,论坛上好多大神会帮你的{:10_279:}

molinchz 发表于 2021-11-14 14:50:50

又没看到回复
页: 1 [2]
查看完整版本: python 读写文件和生成文件怎样操作