问题描述
- C#中将double值变成二进制然后写入文件,Java中载入该文件读取此二进制double值时不正确
-
目前已定位到是因为C#中的byte范围是0到255,而java中byte值为-128到127导致的错误。尝试过使用C#的sbyte来解决:
bw1 = new BinaryWriter(new FileStream("C:UsersDELLDesktopSpatialIndexctest1.bin", FileMode.Create));
bw2 = new BinaryWriter(new FileStream("C:UsersDELLDesktopSpatialIndexctest2.bin", FileMode.Create));byte[] bits=BitConverter.GetBytes(501751.060001268);//测试数据
sbyte[] bitsb = new sbyte[8];
for (int i = 0; i < bits.Length; i++)
{
byte abyte = bits[i];
if (abyte > 127)
{
bitsb[i] = (sbyte)(abyte - 256);
}
else
{
bitsb[i] = (sbyte)abyte;
}
bw1.Write(bitsb[i]);
bw2.Write(bits[i]);
}但是写入后对比,两个文件中的内容还是一样,并没有生成为java二进制格式。
不知道有哪位高人也遇到并解决过类似问题。
解决方案
已定位到是因为C#中的byte范围是0到255,而java中byte值为-128到127导致的错误。
不是这个问题。
byte无所谓符号不符号。
关键是java的double和C#的是否兼容,java是大端序还是小端序。
解决方案二:
问题已解决,两个问题:
一个是要将C#中的byte通过位移变为符合javabyte规则的sbyte
其次,java中的double为大端序,byte排列顺序得改变。