2013-01-21 35 views
1

我需要一个包含2条短裤的4字节的字节数组。我现在有这个:将两条短裤放在一个字节数组中

MemoryStream str = new MemoryStream(); 
using (BinaryWriter writer = new BinaryWriter(stream)) { 
    writer.Write((short) printscreen.Width); 
    writer.Write((short) printscreen.Height); 
} 
byte[] bytes = str.ToArray(); 

在java中我使用了bytebuffer。但是,我应该用什么C#?

我通过一个套接字发送这个字节到一个java服务器。 Java代码:

byte[] data = new byte[in.available()]; 
in.read(data); 
ByteBuffer buffer = ByteBuffer.wrap(data); 
System.out.println(buffer.getShort()); 
+0

什么是你的代码错误?你在问什么? – SLaks

+0

你现在看起来不错。有什么问题? – dtb

+0

我发送它通过一个套接字到一个Java服务器,当我读一个短它返回一个7.但它应该返回1920. –

回答

3

从Java的ByteBuffer Class的文档:

原始值被转换为(或从)根据缓冲区的当前字节顺序字节,其可以经由被检索和修改的序列订单方法。特定的字节顺序由ByteOrder类的实例表示。 字节缓冲区的初始顺序始终为BIG_ENDIAN。

从基于.NET的BinaryWriter.Write(short) Method的文档:

的BinaryWriter专卖店在小尾数格式这种数据类型

既然你不能改变的BinaryWriter,您需要更改字节缓冲区使用的字节顺序:

buffer.order(ByteOrder.LITTLE_ENDIAN); 
+0

感谢您的解释。它现在正在工作:) –

+1

未来,看看* protobuf *而不是发明自己的格式。有* protobuf *的库为你处理这些类型的问题。 – dtb