如何用python读取十六进制数据?

时间:2012-08-03 07:25:37

标签: python enums flags

我有这个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#中定义相同的枚举(为了更高的代码可读性)?

1 个答案:

答案 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,)