• 7755阅读
  • 8回复

如何把8字节char转换成double? [复制链接]

上一主题 下一主题
离线hys97
 

只看楼主 倒序阅读 楼主  发表于: 2009-12-04
如题:
char buf[8];

buff[0] = 0xc2;
buff[1] = 0xf5;
buff[2] = 0x13;
buff[3] = 0x40;
buff[4] = 0xf6;
buff[5] = 0x28;
buff[6] = 0x5c;
buff[7] = 0x8f;

在arm上转换成double正确,但是在QT4.5里面转出来不正确?
arm上:
double dVal = *(double *)buff;
printf("%f", dVal );
dVal = 4.99

QT上:

value = *(double *)buff;
lineEdit->setText(QString::number(value ));

显示的结果是:-1.10707e-234

结果明显不正确,请教各位应该怎么转换处理呢?
[ 此帖被hys97在2009-12-04 14:21重新编辑 ]
离线dbzhang800

只看该作者 1楼 发表于: 2009-12-04
你的 arm 和你的Qt所在机器 二者字节序是否一致??
离线hys97

只看该作者 2楼 发表于: 2009-12-04
我就是直接把buff的内容写死测试的,结果就是上面的样子
离线dbzhang800

只看该作者 3楼 发表于: 2009-12-04
引用第2楼hys97于2009-12-04 14:22发表的  :
我就是直接把buff的内容写死测试的,结果就是上面的样子


我是想问,你的 ARM 是大端还是小端? Qt所在机器是大端还是小端?
离线hys97

只看该作者 4楼 发表于: 2009-12-04
另外我也怀疑字节序不一致,颠倒了字节序后,数值也还是不对,不知道该怎弄了?
离线hys97

只看该作者 5楼 发表于: 2009-12-04
我实际上是把一段ARM上内存的数据直接copy到一个char型的buff里,送到QT中进行显示,其中包括int型和double型两种数据。本来我就是根据数据的类型,直接用指针偏移处理的,其中int型的数据可以正常显示,但是double型的全部错误?但到int和double的排序还不一致吗?
离线hys97

只看该作者 6楼 发表于: 2009-12-04
引用第3楼dbzhang800于2009-12-04 14:24发表的  :
我是想问,你的 ARM 是大端还是小端? Qt所在机器是大端还是小端?


前辈的意思也是说高低顺序可能是反的吧?
离线dbzhang800

只看该作者 7楼 发表于: 2009-12-04
引用第6楼hys97于2009-12-04 14:32发表的  :
前辈的意思也是说高低顺序可能是反的吧?

大小端的问题,网上相关的东西很多,你可以搜搜看。

顺便贴一段Qt代码
  1.     double d1, d2;
  2.     QByteArray buffer = QByteArray::fromHex("8f 5c 28 f6 40 13 f5 c2  40 13 f5 c2 8f 5c 28 f6 ");
  3.     QDataStream bufferStream(&buffer, QIODevice::ReadOnly);
  4.     bufferStream >>d1 >> d2;
  5.     qDebug("%e %e", d1, d2);

结果:
  1. -1.107073e-234 4.990000e+00
离线hys97

只看该作者 8楼 发表于: 2009-12-04
谢谢dbzhang800 !又学习了!
快速回复
限100 字节
 
上一个 下一个