㈠ 51單片機數據類型轉換 高分!
假如你的串口發送函數叫SendData,接收函數叫RecvData,參考如下代碼
發送端:
intSendData(unsignedchar*pSendBuf,unsignedintnSendLen);
intRecvData(unsignedchar*pRecvBuf,unsignedintnBufLen);
voidmain(void)
{
floatf;
inti;
doubled;
SendData((unsignedchar*)&f,sizeof(float));
SendData((unsignedchar*)&i,sizeof(int));
SendData((unsignedchar*)&d,sizeof(double));
}
接收端:
voidmain(void)
{
floatf;
inti;
doubled;
RecvData((unsignedchar*)&f,sizeof(float));
RecvData((unsignedchar*)&i,sizeof(int));
RecvData((unsignedchar*)&d,sizeof(double));
}
宗旨就是,先取其他類型數據的地址,用&符號,然後把地址轉換為unsigned char*型,就可以通過*(unsigned char)的方式或(unsigned char)[]的方式訪問了,就這么簡單,希望可以幫到你.
㈡ 我使用的單片機AD採集的數據儲存到寄存器中的是u16(無符號16位),但是在運算中是float,怎麼解決類型轉換
「單片機AD採集的數據儲存到寄存器中的是u16(無符號16位)」
這個是指采樣得到的數字量讀數,要換算後才能得到實際的模擬值。例如16位ADC的采樣范圍是0~3.3V,那麼每個bit對應於50μV。當讀數為0x0123、即十進制的291時,代表此時采樣電壓為14.55mV左右。
「在運算中是float的」
這要看你運算中取用數據的要求。假如你運算時直接要以mV或μV為單位進行運算,例如上面的例子,你就需要將採集的u16值0x0123轉換為float型代表的14.55。這個轉換過程就需要你編寫函數進行轉換,而不是直接強轉的。