C ++ unsigned int进行双重转换

时间:2017-06-28 11:06:32

标签: c++ qt variables

unsigned int转换为double的正确方法是什么?我需要这是QCPCustomPlot用于数据设置,因为它将QVector<double> 精确作为创建图表的参数。

编辑:傻我。 “内存泄漏”错误问题是由于我错误地初始化QVector<double> x(time), y(ipv4int)引起的。将time值更改为ipv4int(数据出现频率),xy正确匹配。

使用time变量完成,现在是有关转换的实际问题。如何将其转换为double格式,其格式为1855919686,而不是格式为1.85592e+09

QCustomPlot需要double,但似乎QVector<double>无法接受像1.85592e + 09这样的值

更新的代码:

QVector<double> x(i), y(totalIP); //i=236052
for(int o = 0; o <= i; o++){
    double dSec = arrayIPxTime[o][0] - startSecond; //arrayIPTime[o][0] holds time in second
    double dMin = dSec/60;
    double ipv4addr = arrayIPxTime[o][1]; //arrayIPTime[o][0] holds ipaddr in integer format
    x[o] = dMin;
    //y[o] = ipv4addr; this is the line that causes crash. 
    qDebug()<<"Count "<<o<<" time "<< x[o] <<" ipv4 "<<ipv4addr<<" arrayIPxTime[o][1] "<<arrayIPxTime[o][1];
}

当前输出:

Count  236048  time  62.3167  ipv4  1.85592e+09  arrayIPxTime[o][1]  1855919686
Count  236049  time  62.3167  ipv4  1.85592e+09  arrayIPxTime[o][1]  1855919686
Count  236050  time  62.3167  ipv4  1.85592e+09  arrayIPxTime[o][1]  1855919686
Count  236051  time  62.3167  ipv4  1.85592e+09  arrayIPxTime[o][1]  1855919686

2 个答案:

答案 0 :(得分:8)

请放心,将unsigned int转换为double 会导致内存泄漏。

撰写double b = a;绰绰有余,或者只需将a传递给需要double作为参数的函数。

请注意,对于IEEE754双精度浮点类型,unsigned int的转换完全,最高可达到第42次方的2次幂。

答案 1 :(得分:2)

time的价值是多少?看起来像你这样做:

QVector<double> x(time);
// [...]
x[o] = dMin;

如果时间== 166,毫无疑问x[166]会失败,因为向量初始化的大小为time

顺便说一句,没有任何内容与double投射有关。