数据传输格式问题
小的最近在使用NRF2401传输MPU6050的数据。6050采集的数据经过DMP生成四元数后最后计算输出欧拉角,欧拉角为float型的,占四个字节。而2401传输的格式为一个字符,然后一次发送32个字符。是要传送的字符串,yaw是横滚角(float型)。我想着将float型的yaw分成四个字符发送,就先让他右移24位,把最高的8为放到第一个字符里面,结果就报错了。小的很是疑惑,想问问哪位大神能解决这个问题。 float型能做移位运算吗 Gallen.Zhang 发表于 2016-5-24 22:58float型能做移位运算吗
哎,小的C语言不扎实,大神你倒是提醒我了。float确实不能位运算。 用联合体,或者强制转换 分开小数、整数,就可以了 {:lol:} 最近好几个操作float类型数的帖子 本帖最后由 wangpengcheng 于 2016-5-25 10:05 编辑
tmp_buf = (u8)(((u32)yaw >> 24) & 0x00FF);
应该可以! 4楼正解,注意字节序 wangpengcheng 发表于 2016-5-25 10:00
tmp_buf = (u8)(((u32)yaw >> 24) & 0x00FF);
应该可以!
这个必须是强人,直接抹零。
就比如你的资产,不管你有几百万几千万,你总存在某些机构那里吧,他们按亿元给你结算然后抹掉小数只取整还给你你干吗?
变整数。拆分。 保留几位小数位,放大,强制转为整型 用指针,强制转换一下就可以
基本不用float的路过。 zouzhichao 发表于 2016-5-24 23:18
用联合体,或者强制转换
您说的很对,我今天试了下用联合体可以完美的发送float型数据!!当时学联合体的时候还奇怪怎么会有这种特殊的变量。在这里倒是派上大用场了,多亏您提醒,真是谢谢您了!!! takashiki 发表于 2016-5-25 12:09
这个必须是强人,直接抹零。
就比如你的资产,不管你有几百万几千万,你总存在某些机构那里吧,他们按亿 ...
不行啊?
tmp_buf = (u8)(((*(u32*)(&yaw)) >> 24) & 0x00FF);
这样行不?
用union{:lol:} memcpy(tmp_buf, &yaw, sizeof(yaw)) takashiki 发表于 2016-5-25 12:09
这个必须是强人,直接抹零。
就比如你的资产,不管你有几百万几千万,你总存在某些机构那里吧,他们按亿 ...
大神回复精典,比喻恰当。{:titter:} {:titter:}
页:
[1]