我正在使用Python开发C ++ SDK。其中一种API看起来像这样
API
DWORD NET_DVR_GetSDKVersion(
);
文档
2个较高的字节表示主要版本,2个较低的字节表示次要版本,例如0x00030000表示版本为3.0。
它返回一个DWORD
值。我做了一些研究,似乎DWORD
等于Python中的ctypes.c_ulong
。
但是,我从API获得的只是一个整数393216
,意义不大。
代码
sdk = cdll.LoadLibrary("sdk.so")
sdk.NET_DVR_GetSDKVersion.restype = ctypes.c_long
result = sdk.NET_DVR_GetSDKVersion()
我已经使用c_char_p
和其他几种类型设置了返回值类型,但是结果并没有多大意义。
答案 0 :(得分:3)
2个较高的字节表示主要版本,2个较低的字节表示次要版本,例如0x00030000表示版本为3.0。
如您在示例中看到的,该数字为十六进制格式(0x前缀)。以十六进制格式,您可以轻松地看到字节-2个十六进制数字= 1个字节(因为16 * 16为256)。
您需要使用hex(your_value_here)
将数字转换为十六进制,并将其分为主要版本和次要版本两部分。
在您的情况下,hex(393216)
返回'0x60000'
-即0x0
为2个低字节(次要版本),而0x6
为2个低字节(主要版本),给出6.0版本
编辑:
您还可以使用二进制操作提取您的版本。使用your_number_here>>16
将数字右移16位(2字节),即删除低2。
因此,专业是your_number>>16
,次要是your_number - (your_number>>16<<16)
。
答案 1 :(得分:1)
后处理您的数字以提取高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'