[英]read byte array from C# that is written from Java
我试图从C#编写一个Integer并从Java中读取它。 两种语言中的整数都是4个字节。 但是,当我从C#写入时,整数1写入以下字节1000.这意味着第一个字节为1,其余为0。
但在Java中,同样的事情被写为0001.Maing前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网站上配置它订购方法http://download.oracle.com/javase/1.4.2/docs/api/java/nio/ByteBuffer.html#order%28java.nio.ByteOrder%29
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.