3

是否可以在 C# 中写出双精度数的 8 字节表示,然后在 Java 中读取这 8 个字节作为编码的相同双精度数?

4

2 回答 2

7

是的,java 和 .NET 都使用 IEEE-754 表示,尽管 Java 可能会省略一些标志。这里的主要问题是字节顺序,如果需要,这很容易逆转。例如,在 .NET 中,您可以将其处理为:

double value = ...
byte[] bytes = BitConverter.GetBytes(value);

和:

byte[] bytes = ...
double value = BitConverter.ToDouble(bytes);

字节序决定了哪个字节先/最后,但它们之间的切换就像反转数组一样简单;例如,如果你想要“big-endian”,那么你可以转换为:

if(BitConverter.IsLittleEndian) {
    Array.Reverse(bytes);
}

(记住在阅读和写作时都这样做)

恐怕我不知道同样的 java,但它绝对是完全可用的 - 我怀疑ByteBuffer.putDouble/ByteBuffer.getDouble将是一个好的开始。

于 2013-04-26T21:39:29.240 回答
0

您可以将 double 编写为文本或二进制文件,并使用 C#、Java 和数十种语言编写它,也可以用任意数量的语言读取它。我不知道lolcode。;)

编码的相同双数?

如果您使用本机格式,技术上不会编码,因为它是使用的二进制值。即使用它不需要翻译。

double以本机格式读取或写入,我建议使用 ByteBuffer 将 ByteOrder 设置为 LITTLE_ENDIAN。

例如,使用您的 CPU 和大多数语言支持的 IEEE-754 表示(因为 CPU 正在做大部分实际工作)

 byte[] bytes = new byte[8];
 ByteBuffer bb = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN);
 double d = bb.getDouble();
 // or
 bb.putDouble(d);
于 2013-04-26T21:40:10.203 回答