2

コードの何が問題なのかわかりません。見てください:

C# コード:

const int MOVE = 112;
MemoryStream m = new MemoryStream();
m.SetLength(4 + 1 + (1 + 1 + 1 + 1));
BinaryWriter bw = new BinaryWriter(m);
int id_ = getId();
bw.Write(Converter.GetBigEndian(id_));
sbyte eventMove = MOVE;
sbyte rowFromByte = 4;
sbyte colFromByte = 2;
sbyte rowToByte = 1;
sbyte colToByte = 3;
bw.Write(eventMove);
bw.Write(rowFromByte);
bw.Write(colFromByte);
bw.Write(rowToByte);
bw.Write(colToByte);

Javaで読むときは、次のようにします。

ByteBuffer msg = an instance of ByteBuffer...
int id = msg.getInt();
byte event = msg.get();
byte rowFrom = msg.get();
byte colFrom = msg.get();
byte rowTo = msg.get();
byte colTo = msg.get();

Javaで読むたびに、イベントがOKになるまで到達します。

場合によっては正しく動作し、すべて問題なく読み取れます。たとえば、c# を使用すると、次のようになります。

sbyte rowFromByte = 12;
sbyte colFromByte = 2;
sbyte rowToByte = 1;
sbyte colToByte = 3;

それは機能しますが、最初のrowFromByteに値<= 7を設定すると、次のようになります。

sbyte rowFromByte = 4;
sbyte colFromByte = 2;
sbyte rowToByte = 1;
sbyte colToByte = 3;

Java コードは値を正しく読み取れません。

rowFrom: -7, colFrom: 0, rowTo: -7, colTo: 0

解決済み: 上記の値が (間違った時間に) 間違って出力されたため、コードに問題があると考えました。以下に正しい値を出力します。

 rowFrom: 4, colFrom: 2, rowTo: 1, colTo: 3

C# では、Memorystream を使用してバイトを取得し、Java クライアントに送信します。

MemoryStream message = the instance of memory stream...
bytesMessage = message.ToArray();

javaでrowFromに値<= 7を設定すると間違ったバイトの関連付けが返されるのはなぜですか?

私が入っていない非常に奇妙またはばかげた何かがあります。

4

1 に答える 1