知道转换规律就不难,不知道转换规律,不管是不是中文都麻烦
大佬,图1 是ascii 码,然后写入是把ascii转成16进制写成的hex文件 , 是这样吗 molinchz 发表于 2021-11-2 20:20
大佬,图1 是ascii 码,然后写入是把ascii转成16进制写成的hex文件 , 是这样吗
不是。没有所谓的hex文件,只有文本文件和二进制文件(实际上这两者本质也是一样)。生成二进制文件,原理就是以二进制写(wb覆盖,ab追加)的方式新建文件,然后把字节码写入到文件中。字节码哪来呢,按照前几楼的例子,就是把字符串先按某编码格式(比如ASCII)编码成字节码,再按你的规则对字节码进行修改(比如在前面增加两个字节01 00,后面以00字节补够16字节),这就是要写入二进制文件的字节码。 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:
这个路径怎样指定 ,我一直拼不对!! 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
hrpzcf 发表于 2021-11-12 18:09
老师,这个lc_path是接收地址的一个变量,能用加 r这样写吗 本帖最后由 molinchz 于 2021-11-12 18:27 编辑
,我查到openos.path.join(lc_path, f"{com_num}.cis")这个可以刚才试错了 hrpzcf 发表于 2021-11-12 18:09
请教下老师,我用hex(4565),得到 16进制11d5 ,但存放的是d511,也就是高低位交换了,而且python 里面比如hex(2016 ) 得到是0x7e0,高位的07转成7了,这样的,存放到 .cis 文件 中0x7 还能 是07吗?要补码操作吗,高低位交换是分离在合成 ,怎样实现。谢谢 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:} 又没看到回复
页:
1
[2]