是否有可能在C#中写出双数字的8字节表示,然后在Java中将这8个字节读取为编码的相同双数?
答案 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);