为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人2483693 2018-12-06 18:10:00
目前已定位到是因为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 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

public static sbyte[] ToJavaBytes(byte[] bytes)
        {
            int len = bytes.Length;
            sbyte[] sbs = new sbyte[len];
            for (int i = 0; i < len; i++)
            {
                var b = bytes[i];
                if (b > 127)
                {
                    sbs[len - 1 - i] = (sbyte)(b - 256);
                }
                else
                {
                    sbs[len - 1 - i] = (sbyte)b;
                }
            }
            return sbs;
        }

 

查看完整回答
反对 回复 2018-12-16
  • 2 回答
  • 0 关注
  • 523 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号