C# - 移动和反转字节数组中位的顺序



我正在尝试从字节数组中获取正确的 int。字节通过 POS for .Net 从 RFIDTag 读取。(实际上我需要 18 位(

在二进制中,字节数组如下所示:00001110 11011100 00000000 00011011 10000000

我需要摆脱的是:00 00000000 11101101(int = 237(

从原始字节开始,将以相反的顺序为以下位:------10 11011100 00000000

我一直在看bitArray。Array.Reverse。以及几种移动位的方法。但我就是无法理解这个。

谁能指出我正确的方向?

您可以像这样获取位并反转它们:

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

也许

// 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] << 40E变成E0.

>> 4DC变成0D.

| OR E00D成十进制ED,这是十进制237

相关内容

  • 没有找到相关文章

最新更新