还有人写的代码真的算是奇葩中的奇葩了,关于无线模块与浮点数的,不就是四个字节吗,这般倒腾来倒腾去到底是什么意思。
//=======================
//将float数编码装载 保留2位小数
//占用3个字节 数据范围+- 255.99
//=======================
void nrf_load_sfloat(uint8_t a,float num)
{
if(num > 0){
TxBuf[a] = '+';
TxBuf[a+1] = (uint8_t)num;//转换成uchar类型,自动将保留低8位,去除高位。
TxBuf[a+2] = (uint16_t)((num - (int)num)*100);
}
else if(num < 0){
num = -num;
TxBuf[a] = '-';
TxBuf[a+1] = (uint8_t)num;
TxBuf[a+2] = (uint16_t)((num - (int)num)*100);
}
else{
TxBuf[a] = '0';
TxBuf[a+1] = 0;
TxBuf[a+2] = 0;
}
}
这是我用的方法:
//=========================
//将float数直接装载(小端模式)
//占用4个字节 数据范围符合IEEE标准(单精度)
//=========================
void nrf_send_float(uint8_t a,float num)//a是数据包在数组内的起始位置
{
TxBuf[a ] = *((uint32_t *)&num);
TxBuf[a + 1] = *((uint32_t *)&num) >> 8;
TxBuf[a + 2] = *((uint32_t *)&num) >> 16;
TxBuf[a + 3] = *((uint32_t *)&num) >> 24;
}
//=======================
//将float数编码装载 保留2位小数
//占用3个字节 数据范围+- 255.99
//=======================
void nrf_load_sfloat(uint8_t a,float num)
{
if(num > 0){
TxBuf[a] = '+';
TxBuf[a+1] = (uint8_t)num;//转换成uchar类型,自动将保留低8位,去除高位。
TxBuf[a+2] = (uint16_t)((num - (int)num)*100);
}
else if(num < 0){
num = -num;
TxBuf[a] = '-';
TxBuf[a+1] = (uint8_t)num;
TxBuf[a+2] = (uint16_t)((num - (int)num)*100);
}
else{
TxBuf[a] = '0';
TxBuf[a+1] = 0;
TxBuf[a+2] = 0;
}
}
这是我用的方法:
//=========================
//将float数直接装载(小端模式)
//占用4个字节 数据范围符合IEEE标准(单精度)
//=========================
void nrf_send_float(uint8_t a,float num)//a是数据包在数组内的起始位置
{
TxBuf[a ] = *((uint32_t *)&num);
TxBuf[a + 1] = *((uint32_t *)&num) >> 8;
TxBuf[a + 2] = *((uint32_t *)&num) >> 16;
TxBuf[a + 3] = *((uint32_t *)&num) >> 24;
}