0
byte[] content
を複数のフィールドにアンパックします。そのほとんどはフィールドからタイプへ直接マッピングされます(例えば、4バイト= Uint32)。バイトにパックされたフィールドがいくつかあります。たとえば8個のbool、または2個のビット+4ビット+ bool + boolです。以下のコンストラクタでは、content
をクラスプロパティに解析しようとしています。ビット演算と型変換エラー
public RFTagLost(byte[] content)
{
byte flags1;
UInt16 flags2;
int i = 0;
GatewaySerial = BitConverter.ToUInt32(content, i);
i += sizeof(UInt32);
SerialNumber = BitConverter.ToUInt32(content, i);
i += sizeof(UInt32);
Token = BitConverter.ToUInt32(content, i);
i += sizeof(UInt32);
flags1 = content[i];
i += sizeof(byte);
// TODO parse flags
GatewayMode = (byte)((flags1 >> 0) & 3); // 2 bits
LinkType = (byte)((flags1 >> 2) & 3); // 2 bits
Reserved = (byte)((flags1 >> 4) & 15); // 4 bits
TagType = content[i];
i += sizeof(byte);
flags2 = BitConverter.ToUInt16(content, i);
i += sizeof(UInt16);
LastSeen = (UInt16)((flags2 >> 0) & 32767); // 15 bits
LastSeenInMinutes = (bool)((flags2 >> 15) & 1); // 1 bit
}
私は、シフトとマスク操作がintを返すのに問題がありました。私は最終的に、flag1がバイトであるにもかかわらず、bitwiseがintへの代入を失敗させていたintを返すことに成功しました。 flag2と同じです。
今私のエラーが
が最後のフィールドを抽出しようとするとこれは「ブール」
に型「int型」を変換できませんということです。これはUInt16の最後のビットです
これらのビットフィールドを抽出するのは適切ですか? bool LastSeenInMinutes
を動作させるにはどうすればよいですか?ブール値をint型に変換するために