我有一种感觉,这与BitConverter.ToUInt16
wiorks 的方式有关,但我一生都无法弄清楚为什么这会给我带来时髦的数据。
我需要忽略端口上的前两位并将其余位转换为 16 位无符号整数。
我尝试过反转数组,反转我的掩码,同时进行不同的转换以及各种奇怪的事情。
进来的两个字节是第一个是最重要的。第一个字节中的前两位需要取消设置。
有人可以指出我正确的方向吗?
byte[] buffer = new byte[2];
int count = port.Read(buffer, 0, buffer.Length);
Console.WriteLine("0: {0}", BitConverter.ToString(buffer));
ushort value = BitConverter.ToUInt16(buffer, 0);
Console.WriteLine("1: {0}", value);
value = (ushort)(value & 0x3FFF);
Console.WriteLine("2: {0}", value);
这是使用 BitConverter.ToUInt16 然后与0x3FFF
掩码进行 ANDing 时的一些示例数据。
0: 80-00
1: 128
2: 128 <-- this should be 0
0: 80-00
1: 128
2: 128 <-- should be 0
0: 01-00
1: 1
2: 1 <-- should be 1, as it is
0: 80-00
1: 128
2: 128 <-- should be 0
0: 80-00
1: 128
2: 128 <-- should be 0
反转数组会给我这样的数据:
0: 00-01
1: 256
2: 256 <-- should be 1
0: 01-80
1: 32769
2: 1 <- not sure what this should be, probably 1 though