C无符号字符的Python版本
我需要把这段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