从 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);
}

从 C# 读取从 Java 编写的字节数组

您可以切换任一侧的字节序以使它们兼容。

例如在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