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,意外结果。

 

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