将 c# 字节转换为 java 字节
本文关键字:字节 java 转换 | 更新日期: 2023-09-27 18:36:06
我没有意识到我的代码出了什么问题,看看:
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 上阅读时,它都会到达事件正常。
有时它可以正常工作,读取所有内容正常,例如如果我放在 c# 上:
sbyte rowFromByte = 12;
sbyte colFromByte = 2;
sbyte rowToByte = 1;
sbyte colToByte = 3;
它可以工作,但是如果我在第一行FromByte上输入值<= 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();
为什么为 rowFrom 输入值 <= 7 会在 java 上返回错误的字节关联?
有些非常奇怪或愚蠢的事情我没有进入。
我解决了这个问题。
问题是:我的代码没有任何问题。
正如我认为这是一个愚蠢的东西:我在服务器上打印了错误的变量。
我不太了解C#,我在stackoverflow上发布了这个问题。也许这个简单的例子对其他人有用。