2022-03-20 python 無符號整數(shù)(unsigned)與有符號整數(shù)的轉換

(1)手動轉化:
當需要定義為unsigned的數(shù)據(jù)時(有符號轉到無符號):
如果unsigned short是16位,value & 0xffff
如果unsigned long是32位,value & 0xffffffff
如果unsigned long是64位,value & 0xffffffffffffffff
請注意,雖然這給了你在C中的值,它仍然是一個有符號的值,因此任何后續(xù)計算都可能給出否定結果,

(2)利用ctypes 包
Python 調(diào)用 C 動態(tài)鏈接庫,包括結構體參數(shù)、回調(diào)函數(shù)
第一步:ctypes 包準備
使用 ctypes,需要首先安裝 python-dev 包;
第二步:so 文件準備
將你的 C 代碼編譯成 .so 文件
第三步:
from ctypes import *

so_file = cdll.LoadLibrary('./libtest.so') # 如果前文使用的是 import ctypes,則這里應該是
print('so_file class:', type(so_file))

C 代碼
typedef struct _test_struct
{
int integer;
char * c_str;
void * ptr;
int array[8];
} TestStruct_st;

'TestStruct_st 的 Python 版本'
from ctypes import *
INTARRAY8 = c_int * 8
class PyTestStruct(Structure):

_fields_ = [
    ("integer", c_int),
    ("c_str", c_char_p),
    ("ptr", c_void_p),
    ("array", INTARRAY8)
]
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容