如何在python3.4中读取winreg中的reg qword?

2024-10-02 18:24:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我插入了一个注册表项,HKEY_LOCAL_MACHINE\SOFTWARE\test\test_qword,类型为REG_QWORD,值为201505090913440x1253a7efba10)。在

然后,我尝试使用winreg加载它,并使用python3.4中的以下代码:

import winreg
key_dir = r"SOFTWARE\test"
reg = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key_dir, 0,
                     winreg.KEY_WOW64_64KEY+winreg.KEY_ALL_ACCESS)
test_dir = list(winreg.QueryValueEx(reg, r'test_qword'))[0]
print(test_dir)
ans = "".join(map(lambda b: format(b, "02x"), test_dir))
print(ans)
print(int(ans, 16))

并得到以下控制台输出:

^{pr2}$

这不是我原来的价值。如何使用winreg检索我的原始值?在


Tags: keytest类型注册表localdirsoftwaremachine
1条回答
网友
1楼 · 发布于 2024-10-02 18:24:00

您编写的代码将值解释为big-endian存储的整数。但是,^{} is stored as a little-endian number.

有一种更容易转换64位整数的bytes值的方法:使用^{}。格式'<q'将读取有符号的64位小端整数:

>>> struct.unpack('<q', b'\x10\xba\xef\xa7S\x12\x00\x00')
(20150509091344,)

如果你想把它读成大端的话:

^{pr2}$

你可以看到它给你的错误值是你在你的代码中得到的。在

关于struct.unpack()及其逆格式struct.pack()的更多信息,请参阅the docs for the ^{} module.

相关问题 更多 >