从 C# 读取从 Java 编写的字节数组
本文关键字:字节 字节数 数组 读取 Java | 更新日期: 2023-09-27 17:55:44
我正在尝试从C#编写一个整数并从Java读取它。在两种语言中,整数都是 4 个字节。但是,当我从 C# 编写它时,整数 1 写在以下字节中1000. 表示第一个字节为 1,其余为 0。
但是在Java中,同样的东西写成0001。测量前 3 个字节为 0,最后一个字节为 1。
有没有一种简单的方法来读取和写入这些语言,而不是每 4 个字节手动反转一次?Java的代码
ByteBuffer buffer = ByteBuffer.allocate(4);
buffer.putInt(1);
for(byte b: buffer.array()){
System.out.print(b);
}
C# 的代码
MemoryStream ms = new MemoryStream();
using(BinaryWriter writer = new BinaryWriter(ms))
{
writer.Write((int)1);
}
foreach(byte b in ms.ToArray()){
Console.Write(b);
}
您可以切换任一侧的字节序以使它们兼容。
例如在java端,您可以将其设置为使用ByteOrder.LITTLE_ENDIAN(默认为BIG_ENDIAN)
在您的情况下,您可以使用 ByteBuffer.order() 来设置顺序。
buffer.order(ByteOrder.LITTLE_ENDIAN);
或者你可以选择在C#端更改它,在这种情况下,你必须让它成为Big-Endian才能与java兼容。
正如
这篇文章所指出的,http://kirkwylie.blogspot.com/2008/11/c-binarywriter-is-little-endian-because.html C# BinaryWriter 只支持小端序,所以你必须在 java 站点上使用 order 方法对其进行配置 http://download.oracle.com/javase/1.4.2/docs/api/java/nio/ByteBuffer.html#order%28java.nio.ByteOrder%29