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

 

你可能感兴趣的:(代码细节学习)