在上位机和下位机进行通讯的时候,通常要进行数据转换为字节(8位)或者word(16位)进行传输
modubusTCP在传输时,通过读写保持性寄存器位进行数据传输,一个保持性寄存器占有2个byte,16个bite,传输的数据常为float型(4个byte,32位),需要进行转换
浮点数的表示通常采用IEEE 754浮点数标准,可以参考文章IEEE754标准的浮点数存储格式
IEEE754转换:在线转换网址
其中float-byte、byte-float代码转自CSDN文章:float型数据与4字节之间的转换,作者tutu-hu
2进制,与运算,左移运算
/*将浮点数f转化为4个字节数据存放在byte[4]中*/
unsigned char* Float_to_Byte(float f)
{float float_data = 0;unsigned long longdata = 0;longdata = *(unsigned long*)&f; //注意,会丢失精度byte[0] = (longdata & 0xFF000000) >> 24;byte[1] = (longdata & 0x00FF0000) >> 16;byte[2] = (longdata & 0x0000FF00) >> 8;byte[3] = (longdata & 0x000000FF);return byte;
}
unsigned int* Float_to_word(float f)
{unsigned long longdata = 0;longdata = *(unsigned long*)&f; //注意,会丢失精度word[0] = (longdata & 0xFFFF0000) >> 16;word[1] = (longdata & 0x0000FFFF);return word;
}
/*将4个字节数据byte[4]转化为浮点数存放在*f中*/float Byte_to_Float(unsigned char *p)
{float float_data=0;unsigned long longdata = 0;longdata = (*p<< 24) + (*(p+1) << 16) + (*(p + 2) << 8) + (*(p + 3) << 0);float_data = *(float*)&longdata;return float_data;
}
float Byte_to_Float(unsigned char *p)
{float float_data=0;unsigned long longdata = 0;longdata = (*p<< 16) + (*(p+1) << 0);float_data = *(float*)&longdata;return float_data;
}
两个8位数如何转化为16位数?
int data = (a<<8) & b;
char a;//高位
char b;//低位
....
int data = (a<<8)&0xFF00;
data &= b;
本文发布于:2024-01-31 08:16:46,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170666020727057.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |