2 oncenaked oncenaked 于 2016.02.26 17:47 提问

C#中将double值变成二进制然后写入文件,Java中载入该文件读取此二进制double值时不正确 1C

目前已定位到是因为C#中的byte范围是0到255,而java中byte值为-128到127导致的错误。

尝试过使用C#的sbyte来解决:

bw1 = new BinaryWriter(new FileStream("C:\Users\DELL\Desktop\SpatialIndex\ctest1.bin", FileMode.Create));
bw2 = new BinaryWriter(new FileStream("C:\Users\DELL\Desktop\SpatialIndex\ctest2.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二进制格式。

不知道有哪位高人也遇到并解决过类似问题。

2个回答

caozhy
caozhy   Ds   Rxr 2016.02.26 17:59

已定位到是因为C#中的byte范围是0到255,而java中byte值为-128到127导致的错误。
不是这个问题。

byte无所谓符号不符号。
关键是java的double和C#的是否兼容,java是大端序还是小端序。

oncenaked
oncenaked 问题已解决,两个问题:一个是要将C#中的byte通过位移变为符合javabyte规则的sbyte,其次,java中的double为大端序,byte排列顺序得改变。
接近 2 年之前 回复
oncenaked
oncenaked   2016.02.27 10:41

问题已解决,两个问题:
一个是要将C#中的byte通过位移变为符合javabyte规则的sbyte
其次,java中的double为大端序,byte排列顺序得改变。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!