联合体是一种特殊的类,也是一种构造类型的数据结构。在一个“联合体”内能够定义多种不同的数据类型,这些多种不同的数据,共同拥有同一段内存(重点)。
nion的成员是共用内存空间的,因此union的成员在内存上的表现形式实际上是同一个东西,这样也为不同数据之间转换提供了方便。
如下是一种union定义,通过这个union,可以轻松实现uint64型数据向8个char数组转换
union ObjectID
{
char buf[8];
uint64 uid;
};
下面以串口发送浮点数据进行举例演示:
/**
* 函 数:浮点数转换为4字节数据
* 参 数:转换对象
转换后存储的位置
* 返 回 值:无
*/
/*定义一个联合体*/
union{
uint8_t u32buffer[4];
float fdata;
}datatemp;
/*将浮点型数据转换为uint8_t*/
void floatout(float fval,uint8_t* u8buf)
{
datatemp.fdata=fval;
memcpy(u8buf,datatemp.u32buffer,4);
}
/*将u8buf中的4个字节的数据转换为浮点型,这里暂未使用这个函数,仅供大家学习*/
float floatin(uint8_t* u8buf)
{
float fdata=0;
memcpy(datatemp.u32buffer,u8buf,4); //u8buf[]是一个数组,存储接收到的数据
fdata=datatemp.fdata; //取出浮点型数据
return fdata;
}
/*使用串口将经过转换的浮点型数据发送出去*/
float a;//需要发送的浮点型数据(4字节)
uint8_t uartTxBuf[100]={0};
uint8_t* sendptr=uartTxBuf;//串口发送数据的buff
floatout(a,sendptr);
HAL_UART_Transmit_DMA(&huart2 ,sendptr,4);