C无符号字符的Python版本

0 投票
3 回答
18934 浏览
提问于 2025-04-16 19:39

我需要把这段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))

用上面的代码,我似乎得不到我想要的值。我怀疑是因为它是无符号值的问题。

谢谢

3 个回答

0

你可以在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

4

这要看你为什么需要一个无符号字符(unsigned char)。大多数情况下,你只需要用Python的整数就可以了。如果你真的需要一个一字节的数据,可以用Python的struct.pack把一个整数转换成一个一字节的字节串。

一般来说,如果你只是逐行翻译代码,而不理解源语言和目标语言的特点,以及你正在翻译的代码内容,通常是得不到好的结果的。

3

也许你只需要对你的数值进行256取模运算。这样结果肯定是无符号的。举个例子:

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

撰写回答