如何在Python中将DWORD转换为字符串

2024-05-21 04:05:12 发布

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

我正在使用Python来处理C++ SDK。其中一个api看起来像这样

API

DWORD NET_DVR_GetSDKVersion(
);

文档

2 higher bytes mean the major version, 2 lower bytes mean the minor version, e.g. 0x00030000 means version 3.0.

它返回一个DWORD值。我做了一些研究,发现在Python中DWORD等于ctypes.c_ulong。在

但是,我从API得到的只是一个没有意义的整数393216。在

编码

^{pr2}$

我已经使用c_char_p和其他几种类型设置了返回值类型,但是结果并没有什么意义。在


Tags: the文档api类型netbytesversionsdk
2条回答

2 higher bytes mean the major version, 2 lower bytes mean the minor version, e.g. 0x00030000 means version 3.0.

正如您在示例中看到的,数字是十六进制格式(0x前缀)。在十六进制格式中,您可以很容易地看到字节-2个十六进制数字=1个字节(因为16*16是256)。在

您需要使用hex(your_value_here)将您的数字转换为十六进制,并将其分为两部分用于主要版本和次要版本。在

在您的例子中,hex(393216)返回'0x60000'-也就是说,0x0作为2个较低的字节(次要版本),而{}作为更高的字节(主要版本),给出版本6.0

编辑:

还可以使用二进制操作提取版本。使用your_number_here>>16将数字16位(2个字节)右移,即删除下面的2。在

所以your_number>>16代表大调,your_number - (your_number>>16<<16)代表小调。在

后处理您的数字,以提取上下16位,并将其格式化为字符串。下面是使用Python 3.6+f字符串的示例:

>>> dword = 393216
>>> hex(dword)
'0x60000'
>>> f'{dword>>16}.{dword&0xFFFF}'
'6.0'
>>> dword = 0x00020003
>>> f'{dword>>16}.{dword&0xFFFF}'
'2.3'

相关问题 更多 >