• 4996阅读
  • 3回复

[提问]关于qdatastream的输出单精度float问题。 [复制链接]

上一主题 下一主题
离线kikiyoufan
 
只看楼主 正序阅读 楼主  发表于: 2012-08-17
别人的一个程序,用于读取二进制文件的c#程序。
filestream  fs ;
binaryreader br(fs);
for(int i=0;i<600;i++)
     buff=br.readsingle;//   buff 是一个float 数组

然后我需要用qt写出相同功能的东西:
Qfile file;
Qdatastream qs(file);
qs.setFloatingPointPrecision(QDataStream::SinglePrecision);for (int i=0;i<600;i++) qs>>buff;
然后事情就很奇怪了,  从buff[0]到buff[382]的数字都完全一样的, 但是从第383个就开始变化了,
c#程序读出的是          10.7172508
而我的qt程序独处的是10.7544565
然后384往后,c#程序数据正常  ,我的qt程序却出现问题,基本上都是一些8.87682343e-13  这样的数字


后来查看了内存发现原来的二进制文件是


而qt程序读出的数据却在上图选中的那一行
也就是第383个单精度浮点数时出现了问题
整个数据错开了一列,  现在想求教各位大神们,这种情况到底是怎么出现的?  困扰了两天了, 程序卡在这里没法做下去了,求大神支招啊!!!





离线kikiyoufan
只看该作者 3楼 发表于: 2012-08-17
( ⊙ o ⊙ )啊!,居然突然间解决了,,,居然是因为file的 open方式 手贱的写成了writeread。。。而不是readonly  啊啊啊啊啊,这下子吃饭也吃得香了 hohohohohoh
离线kikiyoufan
只看该作者 2楼 发表于: 2012-08-17
qs>>buff [ i ]  怎么还是没加上。。是这样子的
离线kikiyoufan
只看该作者 1楼 发表于: 2012-08-17
Qfile file;
Qdatastream qs(file);
qs.setFloatingPointPrecision(QDataStream::SinglePrecision);
for (int i=0;i<600;i++)
      qs>>buff;

啊我那个程序大体是这样的   上面那个忘掉i了
快速回复
限100 字节
 
上一个 下一个