2012-08-03 86 views
-1

我有這個C#應用程序,我試圖與用python編寫的應用程序合作。在C#應用程序發送簡單的命令到Python應用程序,比如我的C#應用​​程序在發送以下內容:如何使用python讀取十六進制數據?

 [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#中相同的枚舉(更高的代碼的可讀性)?

+2

看到這個答案:http://stackoverflow.com/questions/36932/whats-the-best-way-to-implement-an-enum-in-python – sfstewman 2012-08-03 07:28:30

+0

的標題頗具誤導性 - 你實際上在尋找的是「Python中的枚舉」,對嗎? – 2012-08-03 07:51:51

+0

他正在尋找一種方法來實現位字段。 – 2012-08-03 08:44:51

回答

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