sscanf會給嵌入式代碼移植帶來隱患

字符串轉成十六進制,

char buf[3] = {"12"};
char byte;

sscanf(buf, "%02x", &byte);

這種實現是依賴於CPU大小端類型的。

 

對於小端機器,這個代碼運行正常:

sscanf的過程 “12” -> | 12 | 00 | 00 | 00 | -> 取第一個字節0x12賦給byte , byte 等於18,沒問題。

對於大端機器,這個代碼將把byte置零:

sscanf的過程 “12” -> | 00 | 00 | 00 | 12 | -> 取第一個字節0x00賦給byte , byte 等於0,意外結果。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章