首页 > 技术知识 > 正文

QT 蓝牙通讯协议浮点数传输 协议间传输数据都是以字节流的形式传输的,但是有时候需要传输浮点数,这时候通常的办法是扩大倍数成整数传输,本片文章介绍的是另一种方式,联合体:

union floatingDecimal{ uint8_t i[4]; float f; }; 定义floatingDecimal 类型变量: floatingDecimal var; 赋值 Var.f = 12.2; 将联合体中的数组拷贝到字节流中传输出去,接收方将接收的4个字节存到联合体数组中,再使用联合体的浮点成员。这样就可以在不扩大倍数的情况下传输浮点数。 我在Qt中以信号槽的形式模拟了这种情况: signals: void textSignals(unsigned char *f); public slots: void textSlots(unsigned char *c); connect(this,SIGNAL(textSignals(unsigned char*)),this,SLOT(textSlots(unsigned char*)),Qt::QueuedConnection); { floatingDecimal f; f.f = 12.2; unsigned char c[4]; c[0] = f.i[0]; c[1] = f.i[1]; c[2] = f.i[2]; c[3] = f.i[3]; emit textSignals(c); } void MainWindow::textSlots(unsigned char *c) { floatingDecimal f; f.i[0] = c[0]; f.i[1] = c[1]; f.i[2] = c[2]; f.i[3] = c[3]; qDebug() << f.f; }
<

使用qDebug打印出来的值是正确的

猜你喜欢