私はこれがBitConverter.ToUInt16
wiorksのやり方に関係していると感じていますが、これがなぜ私にファンキーなデータを与えているのかを私は一生理解できません。
ポートに入る最初の2ビットを無視し、残りのビットを16ビットの符号なし整数に変換する必要があります。
配列を逆にしたり、マスクを逆にしたり、両方を行ったり、さまざまな変換を行ったり、あらゆる種類の奇妙なことを試しました。
入ってくる2バイトは、最初のバイトが最も重要です。最初のバイトの最初の2ビットは設定解除する必要があります。
誰かが私を正しい方向に向けることができますか?
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
マスクとAND演算を行った場合のサンプルデータを次に示します。
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