-1

我有这个 c# 应用程序,我试图与一个用 python 编写的应用程序合作。c# 应用程序向 python 应用程序发送简单的命令,例如我的 c# 应用程序正在发送以下内容:

        [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# 中相同的枚举(以获得更高的代码可读性)?

4

1 回答 1

3

十六进制符号就是这样,一种写下整数的方法。您可以输入0x80您的源代码,也可以将其写为128,这对计算机来说意味着同样的事情。

在这方面, Python 支持与 C相同的整数文字语法;在类定义中列出相同的属性,并且您拥有与枚举等效的 Python:

class GameRobotCommands(object):
    reset = 0x0
    turncenter = 0x1
    turnright = 0x2
    turnleft = 0x4
    standstill = 0x8
    moveforward = 0x10
    movebackward = 0x20
    utility1 = 0x40
    utility2 = 0x80

C# 应用程序可能使用标准 C 字节表示形式发送这些整数,您可以使用struct模块解释它们,或者,如果作为单个字节发送,则使用ord()

>>> ord('\x80')
128
>>> import struct
>>> struct.unpack('B', '\x80')
(128,)
于 2012-08-03T08:01:23.507 回答