2017-12-08 11 views
2

私はdouble(float/Decimal)の値を持ち、C#のJava ByteBufferで生成されたのと同じバイト配列を取得したいと考えています。 しかし、JavaでByteBuffer.PutDouble、C#でBinaryWriterを使用して生成されるバイト配列は異なります。誰かが2つの実装の詳細の違いを説明してください。C#のByteBuffer.PutDouble相当

ジャワ:

ByteBuffer bytes = ByteBuffer.allocate(8).putDouble(0,1.12346); 

バイト[] = {63、-15、-7、-83、-45、115、-106、54}。

C番号:[] = {153、211、101、49、177、249、241、63} ARR

double value = 1.12346; 
byte[] arr; 
using (MemoryStream stream = new MemoryStream()) 
{ 
    using (BinaryWriter writer = new BinaryWriter(stream)) 
    { 
     writer.Write(value); 
     arr = stream.ToArray(); 
    } 
} 

答えて

1

ByteBufferはデフォルトでビッグエンディアンで、バイトは符号付きです。

C#では、デフォルトでリトルエンディアンであり、バイトは符号なしです。

逆の順序で同じデータを持っていますが、シリアライゼーションの観点から見ると、少し混乱していることを除いて、バイトの符号は重要ではありません。

C#では、EndianBinaryWriterを使用できます。BinaryWriter Endian issue