sprintf在51單片機中轉換字符出錯問題解決
sprintf是C語言庫中具有轉換數(shù)據(jù)類型的功能函數(shù),出現(xiàn)一種情況,
在51單片機中,定義unsigned char temp;
然后 想用串口直接把temp 以十進制數(shù)是、形式打印出來,是先這樣轉換的 sprintf((char*)tem,"%d",temp);即先把temp轉換成十進制數(shù)字符tem,然后再通過串口輸出tem,然而串口輸出的竟然有亂碼,而且和temp的值也不對應;
查找原因:原來%d,代表的是將int型數(shù)據(jù)轉換為十進制字符的作用,既然是int型,那他占用空間為至少2個字節(jié),那么我們定義的temp僅是unsigned char 占空間一字節(jié),所以函數(shù)在轉換時,會錯誤的轉換temp空間外的一字節(jié)空間的數(shù)據(jù),這是未知的數(shù)據(jù),所以會出現(xiàn)打印亂碼情況,那么把unsigned char temp;改為 unsigned int temp 后,再次測試
果然輸出正確無誤!
- 富士通數(shù)字退火芯片DAU明年登場[18年05月19日 12:37]
- 高通總裁拜訪OPPO,傳拿下R15S訂單[18年05月19日 12:37]
- 經(jīng)濟學人:臺積電先進制程將超越英特爾[18年05月19日 12:36]
- 高通恩智浦并購獲批前景樂觀 恩智浦股價創(chuàng)本周最大漲幅[18年05月19日 12:35]
- 共建智慧家庭美好未來!2018中國智慧家庭高峰論壇精彩盤點[18年05月19日 12:33]
- 樂鑫ESP32開發(fā)板正式通過Amazon FreeRTOS的驗證[18年05月18日 21:30]