我必须创建在 little-endian 编码中具有一些字符和十六进制值的文件。要进行编码,我使用:
pack("I", 0x01ddf23a)
Run Code Online (Sandbox Code Playgroud)
这给了我:
b':\xf2\xdd\x01'
Run Code Online (Sandbox Code Playgroud)
第一个问题是,这给了我无法写入文件的字节字符串。第二个是 \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
Run Code Online (Sandbox Code Playgroud)
将 open() 从“w”更改为“wb”迫使我只写字节,但我想写很多字符串和很少的字节,例如:
Hello world
^I^M^T^B
End file
Run Code Online (Sandbox Code Playgroud)
我知道我可以简单地做到这一点:
fs.open("file" "w")
fs.write("Hello world")
fs.write("\x3a\xf2\xdd\x01")
fs.write("End file")
fs.close()
Run Code Online (Sandbox Code Playgroud)
但这使我的字节值 0x01ddf23a 难以阅读,并且在以该形式更改此值时很容易犯一些错误。