我有一个 double ( float /十进制)值,我想获得与 C# 中的 Java ByteBuffer 生成的字节数组相同的字节数组。 但是,Java 中使用 ByteBuffer.PutDouble 和 C# 中使用 BinaryWriter 生成的字节数组是不同的。有人可以解释一下两者之间的实现细节差异吗。
Java:
ByteBuffer bytes = ByteBuffer.allocate(8).putDouble(0,1.12346);
bytes[] = {63, -15, -7, -83, -45, 115, -106, 54};
C#:
double value = 1.12346;
byte[] arr;
using (MemoryStream stream = new MemoryStream())
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(value);
arr = stream.ToArray();
}
}
arr[] = {153, 211, 101, 49, 177, 249, 241, 63};
最佳答案
ByteBuffer 默认是 big endian 并且字节是有符号的。
在 C# 中,默认是小端字节序,字节是无符号的。
你有相反顺序的相同数据,从序列化的角度来看,字节的符号并不重要,只是有点困惑。
在 C# 中,您可以使用 EndianBinaryWriter BinaryWriter Endian issue
关于java - C# 中的 ByteBuffer.PutDouble 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47711650/