我有这个c#app,我试图与用python编写的应用程序合作。 c#app将简单命令发送到python应用程序,例如我的c#app发送以下内容:
[Flags]
public enum GameRobotCommands
{
reset = 0x0,
turncenter = 0x1,
turnright = 0x2,
turnleft = 0x4,
standstill = 0x8,
moveforward = 0x10,
movebackward = 0x20,
utility1 = 0x40,
utility2 = 0x80
}
我正在通过TCP执行此操作并启动并运行TCP,但我可以在Python中明确地执行此操作以检查标志:
if (self.data &= 0x2) == 0x2:
#make the robot turn right code
在python中有没有办法我可以在c#中定义相同的枚举(为了更高的代码可读性)?
答案 0 :(得分:3)
十六进制表示法就是这样一种记下整数的方法。您可以在源代码中输入0x80
,也可以将其写为128
,这对计算机来说意味着同样的事情。
Python在这方面支持same integer literal syntax作为C;列出类定义中的相同属性,并且您具有与枚举相同的Python:
class GameRobotCommands(object):
reset = 0x0
turncenter = 0x1
turnright = 0x2
turnleft = 0x4
standstill = 0x8
moveforward = 0x10
movebackward = 0x20
utility1 = 0x40
utility2 = 0x80
C#应用程序可能使用standard C byte representations发送这些整数,您可以使用struct
module解释这些整数,或者,如果以单个字节发送,则使用ord()
:
>>> ord('\x80')
128
>>> import struct
>>> struct.unpack('B', '\x80')
(128,)