sprintf在51單片機中轉換字符出錯問題解決
sprintf是C語言庫中具有轉換數據類型的功能函數,出現一種情況,
在51單片機中,定義unsigned char temp;
然后 想用串口直接把temp 以十進制數是、形式打印出來,是先這樣轉換的 sprintf((char*)tem,"%d",temp);即先把temp轉換成十進制數字符tem,然后再通過串口輸出tem,然而串口輸出的竟然有亂碼,而且和temp的值也不對應;
查找原因:原來%d,代表的是將int型數據轉換為十進制字符的作用,既然是int型,那他占用空間為至少2個字節,那么我們定義的temp僅是unsigned char 占空間一字節,所以函數在轉換時,會錯誤的轉換temp空間外的一字節空間的數據,這是未知的數據,所以會出現打印亂碼情況,那么把unsigned char temp;改為 unsigned int temp 后,再次測試
果然輸出正確無誤!
相關文章
- Keil MDK破解過程詳解[18年05月20日 11:11]
- STM32F407之模擬I2C(二)之24C128[18年05月20日 12:18]
- STM32F1使用I/0模擬I2C接口[18年05月20日 12:17]
- STM32模擬I2C程序[18年05月20日 12:13]
- STM8S 模擬I2C程序[18年05月20日 12:14]
- 普通IO口模擬實現I2C通信及應用解析[18年05月20日 12:12]