2017-02-15 58 views
1

我想从二进制文件中读取双精度浮点数并将其分配给一个静态双变量。我已经尝试了很多方法,但无论方法的转换结果是0还是从文件中正确读取数字(作为字符数组),但是当我尝试转换它时会发生什么...包含的标题是:#包括<字符串>#包括< sstream>的#include < stdlib.h>中字符串双重转换allways 0

方法的代码段波纹管式给出:

FILE * pFile; 
char mystring [100]; 
double v; 
string temp; 
QString t_string; 
pFile = fopen ("path_to_binary_file","r"); 
if (pFile != NULL) 
{ 
    if (fgets (mystring , 100 , pFile) != NULL) 
    { 
    //I am putting a \0 on the last position since my array finishes with \n 
    mystring[strlen(mystring) - 1] = '\0'; 

    temp.assign(mystring, mystring + 12); 
    t_string = QString::fromStdString(temp); 
    // std::istringstream s(temp); 
    // s >> sheethConstant; 

    v = t_string.toDouble();//atof(mystring); 
    static_variable = v; 
    } 
fclose (pFile); 
} 
+0

QString的价值是什么? – Jepessen

+1

'std :: stod(“1234.56”)'。 – Chad

+0

你还必须包含一些Qt标题以及所提到的标题。 – Steve

回答

2

如果小数点分隔符是你必须处理的一个逗号语言环境。

由于您使用的是Qt,因此可以设置一个QLocale对象并设置使用逗号的语言环境(我只采用了一个可用的语言环境,但并不针对您的具体情况)。

#include <QDebug> 
#include <QLocale> 

int main(int argc, char *argv[]) { 
    QString t_string("0,04019173434"); 
    QLocale locale(QLocale::Catalan); 
    double number = locale.toDouble(t_string); 
    qDebug() << "String is" << t_string << ", number is " << number; 
    return 0; 
} 
+0

非常感谢!你的想法做到了。 –

+0

很高兴知道。为了将来的参考,请在您的问题中指定逗号,而不只是在评论中。 – Jepessen