簡體   English   中英

C unsigned char 的python 版本

[英]python version of C unsigned char

我需要有關此 C 代碼的 Python 版本的幫助:

#define HostBusy_high   0x02
#define control_register    0x37a

Out32 (control_register,(unsigned char)(Inp32(control_register) | HostBusy_high));

Out32 和 Inp32 是位於 inpout32.dll 中的函數,用於連接並行端口。 這些函數以十六進制值作為參數。 我試圖在 python 中編碼以獲得所需的值,但這不是我得到的。 見下面的python版本:

from ctypes import windll

#parallel port instance
p_port = windll.inpout32
HostBusy_high = 0x02
control_register = 0x37a

write_data = write(p_port(Inp32(control_register) | HostBusy_high))
 Out32 (control_register,write_data))

使用上面的代碼,我似乎沒有得到我想要的值。 我懷疑它是無符號值。

謝謝

取決於你為什么需要一個無符號字符。 大多數情況下,您只需使用 Python 整數。 如果您確實需要一個一字節的數據,您可以使用 Python 的 struct.pack 從一個整數中生成一個一字節的字節字符串。

一般來說,如果不能很好地理解源語言和目標語言以及要翻譯的代碼體,則無法通過逐行逐行逐行翻譯語言之間的代碼來獲得良好的結果。

也許你應該得到你的價值的模 256。 那么它肯定是未簽名的。 例子:

>>> 12 % 256
12
>>> 1022 % 256
254
>>> -1 % 256
255
>>> -127 % 256
129

您可以在 ctypes 庫中找到具有c_ubyte數據類型的匹配項。 看看你是否用你的值填充了那個類型的對象,看看它是否合適。

https://docs.python.org/3/library/ctypes.html#ctypes.c_ubyte

其余類型在https://docs.python.org/3/library/ctypes.html#fundamental-data-types中列出

暫無
暫無

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

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