簡體   English   中英

如何正確將十六進制值傳遞給Python ctypes中的C dll?

[英]How do I properly pass a hex value into a C dll in Python ctypes?

我正在使用ctypes從python調用C DLL。 對於大多數功能,所有功能都可以正常工作。 但是...現在我有一個需要輸入十六進制常量的函數,我似乎無法正確傳遞它。

我沒有C源代碼,但是從文檔中可以看到,函數定義如下:

sensv_bn* NewSensvToFinding_bn (const node_bn* Qnode, const nodelist_bn* Vnodes, int what_find)

我幾乎可以確定我正確傳遞了QnodeVnodes ,因為它們是由DLL中的其他函數創建的。 問題在於名為what_findint

從DLL附帶的頭文件中,我看到以下行: enum {ENTROPY_SENSV = 0x02, REAL_SENSV = 0x04, VARIANCE_SENSV = 0x100, VARIANCE_OF_REAL_SENSV = 0x104}; /* for NewSensvToFinding_bn */ enum {ENTROPY_SENSV = 0x02, REAL_SENSV = 0x04, VARIANCE_SENSV = 0x100, VARIANCE_OF_REAL_SENSV = 0x104}; /* for NewSensvToFinding_bn */

我要為what_find傳遞的值是VARIANCE_OF_REAL_SENSV的值,即十六進制值0x104

我試着不經過轉換就傳遞它,也使用ctypes.c_int(0x104)將其強制轉換為int,但是函數返回0而不是指針。 我也嘗試過不經過轉換而得到相同的結果。

我應該執行更適當的轉換嗎? 我有點C n00b,如果這是一個非常幼稚的問題,抱歉。

Python和C都允許您使用十六進制文字定義整數。 它們被解釋為以16為底,但是它們的仍然是整數。 它只不過是相同值的替代符號:

>>> 0x02
2
>>> 0x104
260
>>> import ctypes
>>> ctypes.c_int(0x104)
c_int(260)

您還可以使用八進制( 0o404 ,或者,僅在python 2中為0404 )或二進制( 0b100000100 )表示法來指定相同的整數值。

簽名指定它想要一個int ,所以傳入一個整數值。 如果需要,可以在Python源代碼中將該整數值指定為十六進制文字,但是C代碼只希望有一個整數值,並且不管是否使用十六進制表示法創建該值。

如果函數調用不能使用正確的常量,則其他問題是錯誤的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM