找回密码
 立即注册
收起左侧

Qt 读取C#创建的二进制数据,数值不正确

4
回复
7116
查看
[复制链接]

尚未签到

来源: 2018-5-25 14:36:20 显示全部楼层 |阅读模式
10Qter豆
不会插入代码啊,请版主帮我修改一下。

我需要将一些二进制文件用Qt读取出来,二进制文件存储的数据格式与大小是已知的。读取时发现,qint16类型的数据读出来是实际值的256倍,int类型的读出来是实际值的16777216倍,float和double类型也是一个超级大的指数倍数关系。以Int16为例,C#创建Int16格式的二进制文件代码如下:
      
  1. public void readInt16()
  2.         {
  3.             string int16Path = "C:/Users/FangZhe/Desktop/test/int16_binary_generate_by_qt.bin";
  4.             System.IO.FileStream fs = new System.IO.FileStream(int16Path, FileMode.Open, FileAccess.Read);
  5.             BinaryReader pBinaryReader = new BinaryReader(fs);
  6.             Console.WriteLine("int16:");
  7.             for (int j = 0; j < 10; j++)
  8.             {
  9.                 Int16 temp0 = pBinaryReader.ReadInt16();
  10.                 Console.WriteLine(temp0);
  11.             }
  12.         }
复制代码


Qt读取的代码如下:
  1. void MainWindow::on_btnReadInt16Bin_clicked(){
复制代码

C#输入的是1到10,Qt读出的却是这样:
output =  256
output =  512
output =  768
output =  1024
output =  1280
output =  1536
output =  1792
output =  2048
output =  2304
output =  2560
经过测试发现,Qt创建,C#读取到的数值也会扩大相同的倍数。用Qt创建再用Qt读取,或者用C#创建再用C#读取是没有问题的。
测试我要用的其他软件生成的二进制数据,发现C#读取的结果是正确的。
求大佬解答。



回复

使用道具 举报

尚未签到

2018-5-25 21:30:42 显示全部楼层
不好意思不小心删错代码了,麻烦你自己在那个框里面自己再加上代码吧
回复

使用道具 举报

累计签到:742 天
连续签到:1 天
2018-5-26 09:08:49 显示全部楼层
本帖最后由 Since 于 2018-5-26 17:53 编辑

                                                                                                                  
回复

使用道具 举报

尚未签到

2018-5-28 15:18:39 显示全部楼层
Joey_Chan 发表于 2018-5-25 21:30
不好意思不小心删错代码了,麻烦你自己在那个框里面自己再加上代码吧

自己测试解决了,麻烦您了
回复

使用道具 举报

尚未签到

2018-5-28 15:20:30 显示全部楼层
本帖最后由 Freeza 于 2018-5-28 15:41 编辑

已解决使用Hex Editor查看Qt写入的二进制文件,发现Qt写二进制数据时会在两个数字中间插入0,例如写入一个short类型的数字2,实际写入0010后,还会也就是说Qt的二进制文件格式跟C#是不兼容的。使用C++的std::fstream便没有这个问题了。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了