我需要创建一些带有字符和十六进制值的小端编码文件。为进行编码,我使用以下方法:
pack("I", 0x01ddf23a)
而这给了我:
b':\xf2\xdd\x01'
第一个问题是,这给了我字节字符串,但我无法将其写入文件。第二个问题是\x3a被转换为“:”。我期望的是将\x3a\xf2\xdd\x01作为字节写入文件,而不是作为字符。
我尝试过:
>>> a=0x01ddf23a
>>> str(pack("I", a))
"b':\\xf2\\xdd\\x01'" <= wrong
>>> pack("I", a).hex()
'3af2dd01 <= I need '\x' before each byte
>>> pack("I", a).decode()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf2 in position 1: invalid continuation byte
将open()中的"w"更改为"wb"会强制我只能写入字节,但是我想写入许多字符串和少量字节,例如:
Hello world
^I^M^T^B
End file
我知道我可以简单地做到这一点:
fs.open("file" "w")
fs.write("Hello world")
fs.write("\x3a\xf2\xdd\x01")
fs.write("End file")
fs.close()
但是这会使我的字节值0x01ddf23a难以阅读,且在更改此值时很容易犯错。