4

デバイスは、リミット スイッチのステータスを一連の 1 と 0 (「010111110000」を含む文字列) として報告します。これらのスイッチの理想的な表現は、次のようなフラグ列挙です。

[Flags]
public enum SwitchStatus
{
    xMin,
    xMax,
    yMin,
    yMax,

    aMax,
    bMax,
    cMax,
    unknown4,

    unknown3,
    unknown2,
    unknown1,
    unknown0
}

文字列表現を列挙型に変換することは可能ですか? もしそうなら、どのように?

4

2 に答える 2

13

使用するConvert.ToInt64(value, 2)Convert.ToInt32(value, 2)、これにより long または int のいずれかが得られます。次に、単に使用します

[Flags]
public enum SwitchStatus : int // or long
{
    xMin = 1,
    xMax = 1<<1,
    yMin = 1<<2,
    yMax = 1<<3,
    ...
}

SwitchStatus status = (SwitchStatus)Convert.ToInt32(value, 2);
于 2011-07-08T13:32:45.393 に答える
8

まず、「バイナリ文字列」を int に変換する必要があります。

String binString = "010111110000";
int number = Integer.parseInt(binString, 2);

enum 項目をそれぞれの番号で宣言する必要があります。

[Flags]
public enum SwitchStatus
{
    xMin = 1,
    xMax = 2,
    yMin = 4,
    //...
    unknown0 = 32 //or some other power of 2
}

いよいよマッピングです。次のように番号から列挙型を取得します。

SwitchStatus stat = (SwitchStatus)Enum.ToObject(typeof(SwitchStatus), number);
于 2011-07-08T13:28:00.033 に答える