将c#字节转换为java字节

时间:2013-10-21 04:33:17

标签: c# java type-conversion byte endianness

我没有意识到我的代码有什么问题,请看一下:

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;

它有效,但如果我在第一行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();

为什么为rowFrom设置值< = 7会在java上返回错误的字节关联?

有一些非常奇怪或愚蠢的东西,我没有进入。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

问题是:我的代码没有任何问题

我认为这是一个愚蠢的东西:我在服务器上打印错误的变量。

我不太了解C#我在stackoverflow上发布了这个问题。 也许这个简单的例子对其他人有用。

相关问题