0

バイトの配列から正しいintを取得しようとしています。バイトは、POSfor.Netを介してRFIDTagから読み取られます。(実際には18ビットが必要です)

バイナリでは、バイト配列は次のとおりです。00001110 11011100 00000000 00011011 10000000

私がそれから抜け出す必要があるのは:00 00000000 11101101(int = 237)

元のバイトから、逆の順序で次のビットになります:------10 11011100 00000000

私はbitArrayを見てきました。Array.Reverse。そして、ビットをシフトするいくつかの方法。しかし、私はこれに頭を包むことができません。

誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

5

あなたはビットを取得し、次のようにそれらを逆にすることができます:

byte[] data = { 0x0E, 0xDC, 0x00, 0x1B, 0x80 };

// get only first four bytes
byte[] bits = new byte[4];
Array.Copy(data, 0, bits, 0, 4);

// reverse array if system uses little endian
if (BitConverter.IsLittleEndian) {
  Array.Reverse(bits);
}

// get a 32 bit integer from the four bytes
int n = BitConverter.ToInt32(bits, 0); // 0x0EDC001B

// isolate the 18 bits by shifting and anding
n >>= 8; // 0x000EDC00
n &= 0x0003FFFF; // 0x0002DC00

// reverse by shifting bits out to the right and in from the left
int result = 0;
for (int i = 0; i < 18; i++) {
  result = (result << 1) + (n & 1);
  n >>= 1;
}

Console.WriteLine(result);

出力:

237
于 2013-02-05T23:48:26.333 に答える
0

多分

// 00001110 11011100 00000000 00011011 10000000
//    0E       DC       00       1B       80   
byte[] info = new byte[] { 0x0E, 0xDC, 0x00, 0x1B, 0x80 };
int result = (info[0] << 4) | (info[1] >> 4);
Console.WriteLine(result); // ==> 237

info[0] << 4に変わり0EますE0

>> 4に変わりDCます0D

|ORE0と10 進0DED237

于 2013-02-05T23:36:34.467 に答える