我试图从字节数组中获取正确的int。 通过POS为.Net从RFID标签读取字节。 (实际上我需要18位)
在二进制中,字节数组如下: 00001110 11011100 00000000 00011011 10000000
我需要摆脱的是: 00 00000000 11101101 (int = 237)
从原始字节开始,反向顺序为以下位: ------ 10 11011100 00000000
我一直在看bitArray。 Array.Reverse。还有几种移位的方法。但我无法绕过这一个。
有人能指出我正确的方向吗?
答案 0 :(得分: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
答案 1 :(得分: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
。
|
或E0
和0D
将ED
转换为小数237