c# - 将 C# 字节转换为 Java 字节

标签 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 上阅读时,它都会到达事件 ok。

有时它工作正常,读取一切正常,例如,如果我使用 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 上发布了这个问题。 也许这个简单的例子对其他人有用。

关于c# - 将 C# 字节转换为 Java 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19486304/

相关文章:

c# - IQueryable 与 Linq 表达式导致 NullReferenceException

c# - SharePoint Online CSOM 网站列默认值

c# - 等待手动创建的任务不考虑内部等待

java - 将全滚动合成导出到图像

java - Java中如何使用ByteBuffer的Wrap方法

java - Jsp 中标签的数据类型

java - Java 中 long 到 int 的转换不起作用

c# - 使用 ref over return

运行 jdk1.8.0 的 ARM 上的 JavaFX

java - 使用 EasyMock 和 PowerMock 捕获私有(private)方法参数