字节数组到双转换在QT中失败

时间:2016-03-09 08:37:44

标签: c# c++ qt double byte

当我转换从TCP通信接收的后续字节时,我在QT中得到0,在C#.NET中得到32.097133442517112。如何在QT中解决此问题?

C#.NET

byte[] data = {0xbd, 0x7a, 0x5f, 0xde, 0x6e, 0x0c, 0x40, 0x40};
double value = BitConverter.ToDouble(data, 0); // value is 32.097133442517112

C ++ QT

QByteArray *arr = new QByteArray();
arr->append(0xbd);
arr->append(0x7a);
arr->append(0x5f);
arr->append(0xde);
arr->append(0x6e);
arr->append(0x0c);
arr->append(0x40);
arr->append(0x40);
double value = arr->toDouble(); // value is 0

修改 以下片段似乎工作正常。它将结果显示为32.0971。

union {
    double d;
    char bytes[sizeof(double)];
} u;

u.bytes[0]=0xbd;
u.bytes[1]= 0x7a;
u.bytes[2]=0x5f;
u.bytes[3]=0xde;
u.bytes[4]=0x6e;
u.bytes[5]=0x0c;
u.bytes[6]= 0x40;
u.bytes[7]=0x40;
qDebug()<<u.d; // result 32.0971

我应该继续这样做,还是有任何QT方面的解决方案?

2 个答案:

答案 0 :(得分:0)

我认为QByteArray::toDouble()仅适用于可读的双值(如3.14),因此Converting char * to double while reading from binary file in C++?应该会为您提供如何完成的提示

答案 1 :(得分:0)

好的,QDataStream会这样做:

double value2;
QDataStream stream(*arr);
stream.setByteOrder(QDataStream::LittleEndian);
stream >> value2; // value2 is 32.097133442517112

感谢那些贡献的人。