启朴 发表于 2016-5-24 22:46:26

数据传输格式问题

        小的最近在使用NRF2401传输MPU6050的数据。6050采集的数据经过DMP生成四元数后最后计算输出欧拉角,欧拉角为float型的,占四个字节。而2401传输的格式为一个字符,然后一次发送32个字符。是要传送的字符串,yaw是横滚角(float型)。我想着将float型的yaw分成四个字符发送,就先让他右移24位,把最高的8为放到第一个字符里面,结果就报错了。小的很是疑惑,想问问哪位大神能解决这个问题。

Gallen.Zhang 发表于 2016-5-24 22:58:40

float型能做移位运算吗

启朴 发表于 2016-5-24 23:16:08

Gallen.Zhang 发表于 2016-5-24 22:58
float型能做移位运算吗

哎,小的C语言不扎实,大神你倒是提醒我了。float确实不能位运算。

zouzhichao 发表于 2016-5-24 23:18:49

用联合体,或者强制转换

devcang 发表于 2016-5-25 00:31:31

分开小数、整数,就可以了   {:lol:}

w282529350 发表于 2016-5-25 08:20:53

最近好几个操作float类型数的帖子

wangpengcheng 发表于 2016-5-25 10:00:12

本帖最后由 wangpengcheng 于 2016-5-25 10:05 编辑

tmp_buf = (u8)(((u32)yaw >> 24) & 0x00FF);
应该可以!

learner123 发表于 2016-5-25 11:56:11

4楼正解,注意字节序

takashiki 发表于 2016-5-25 12:09:19

wangpengcheng 发表于 2016-5-25 10:00
tmp_buf = (u8)(((u32)yaw >> 24) & 0x00FF);
应该可以!

这个必须是强人,直接抹零。
就比如你的资产,不管你有几百万几千万,你总存在某些机构那里吧,他们按亿元给你结算然后抹掉小数只取整还给你你干吗?

waterghost 发表于 2016-5-25 12:56:45

变整数。拆分。

FUK_In_Love 发表于 2016-5-25 13:09:38

保留几位小数位,放大,强制转为整型

涵潇舒雅 发表于 2016-5-25 14:10:24

用指针,强制转换一下就可以

dushanwu522 发表于 2016-5-25 14:21:13

基本不用float的路过。

启朴 发表于 2016-5-25 15:53:08

zouzhichao 发表于 2016-5-24 23:18
用联合体,或者强制转换

您说的很对,我今天试了下用联合体可以完美的发送float型数据!!当时学联合体的时候还奇怪怎么会有这种特殊的变量。在这里倒是派上大用场了,多亏您提醒,真是谢谢您了!!!

wangpengcheng 发表于 2016-5-25 16:06:57

takashiki 发表于 2016-5-25 12:09
这个必须是强人,直接抹零。
就比如你的资产,不管你有几百万几千万,你总存在某些机构那里吧,他们按亿 ...

不行啊?
tmp_buf = (u8)(((*(u32*)(&yaw)) >> 24) & 0x00FF);
这样行不?

zhuozz 发表于 2016-5-25 16:52:53

用union{:lol:}

at90s 发表于 2016-5-26 09:09:51

memcpy(tmp_buf, &yaw, sizeof(yaw))

xf331785508 发表于 2016-5-26 10:00:58

takashiki 发表于 2016-5-25 12:09
这个必须是强人,直接抹零。
就比如你的资产,不管你有几百万几千万,你总存在某些机构那里吧,他们按亿 ...

大神回复精典,比喻恰当。{:titter:} {:titter:}
页: [1]
查看完整版本: 数据传输格式问题