java - C# 中的 ByteBuffer.PutDouble 等价物

标签 java c# arrays

我有一个 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/

相关文章:

java - 从 HTML 调用 REST Web 服务

java - 如何在 Drools 中打印不匹配的参数

c# - 一种类型但像变量一样使用?

c# - 正则表达式替换和字符串不变性

c - 在 C 中打印用循环填充的字符串?

java - maven settings.xml 中的存储库与pluginRepositories

c# - 抽象类和接口(interface)中可以使用相同的字段名称吗?

ios - 从两个不同 View 切换多个标签

Python 将字符串解压到数组中

java - JPA:保留具有 OneToMany 关系的 2 个实体的问题