-1

Pythonで書かれたアプリと連携しようとしているこのc#アプリがあります。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

16 進表記はまさにそれであり、整数を書き留める方法です。ソース コードを入力する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 に答える