今天我在c风格的编码变量上玩了一点点,以便轻松地与必要的c程序进行通信。 我看过https://docs.python.org/2/library/struct.html 我知道\ x开始2位十六进制表示,但是对于一些数字,我得到:
from struct import *
datum=239179
buf = pack(">Q", datum)
buf
'\x00\x00\x00\x00\x00\x03\xa6K'
What ist \ xa6K? \ xa6是有效表格。
解压缩这个变量的工作完全正常,所以它似乎是十六进制的合法方式,但为什么呢?对于类似的问题,一位朋友写了一个go-program,给了他相同的数字 00 00 00 00 00 03 a6 4b。现在,如果我们检查K的十六进制值,它就是4b。
tldr; 为什么\ xa6K与\ xa6 \ x4b相同?
感谢您的帮助:)
感谢这个解决方案,我觉得有点愚蠢:D
答案 0 :(得分:5)
struct.pack
返回str
对象(python3中的bytes
)。字符串选择使用十六进制代码(例如'\xa6'
)表示非打印字符。但是,与'\x4b'
对应的字节是可打印字符,因此字符串会使用该字符。