我正在使用 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
值。我做了一些研究,似乎 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
和其他几种类型设置了返回值类型,但结果并没有多大意义。
最佳答案
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 个低字节(次要版本)和 0x6
作为更高的字节(主要版本),给出版本 6.0
编辑:
您还可以使用二进制操作提取您的版本。使用 your_number_here>>16
将您的数字向右移动 16 位(2 字节),即删除低 2 位。
所以是 your_number>>16
对于专业,your_number - (your_number>>16<<16)
对于未成年人。
关于python - 如何在 Python 中将 DWORD 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56392520/