是否有可能写出一个C#double并用Java读取它?

时间:2013-04-26 21:21:26

标签: c# java double

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

2 个答案:

答案 0 :(得分:7)

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

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

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

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

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

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

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

答案 1 :(得分:0)

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

  

编码的相同双号?

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

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

e.g。使用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);