今天要从配置文件中读MAC地址,习惯上写成
sscanf (buf, "%02X:02X:02X:02X:02X:02X",
&mac[0],
&mac[1],
&mac[2],
&mac[3],
&mac[4],
&mac[5]
);
因为看代码中,printf的时候都是这样的格式。
在我的机器上写了测试程序测试成功,谁知等我交叉编译到PowerPC平台下,
这段代码就不好使了,还让我迷茫了半天。后来推敲是因为X86与Power移植的问题,
再深入想到是BIG_ENDIAN与LITTLE_ENDIAN的问题,
根本原因还是格式串使用不正确。
我要取字符串中的两个字符并且把它们当作8位的HEX值,送给mac[i],
我的格式字符串使用的是打印MAC地址通用的格式串,反过来给sscanf用就不对了,
格式串中的格式%02X,仅表示把源串中的两个字符当作一个 16进制整数,
并不是说当作一个 8位的16进制整数,
结果就是程序从源串中解析出6个16进制数,并且分别赋值给&mac[i],
当然&#
sscanf (buf, "%02X:02X:02X:02X:02X:02X",
&mac[0],
&mac[1],
&mac[2],
&mac[3],
&mac[4],
&mac[5]
);
因为看代码中,printf的时候都是这样的格式。
在我的机器上写了测试程序测试成功,谁知等我交叉编译到PowerPC平台下,
这段代码就不好使了,还让我迷茫了半天。后来推敲是因为X86与Power移植的问题,
再深入想到是BIG_ENDIAN与LITTLE_ENDIAN的问题,
根本原因还是格式串使用不正确。
我要取字符串中的两个字符并且把它们当作8位的HEX值,送给mac[i],
我的格式字符串使用的是打印MAC地址通用的格式串,反过来给sscanf用就不对了,
格式串中的格式%02X,仅表示把源串中的两个字符当作一个 16进制整数,
并不是说当作一个 8位的16进制整数,
结果就是程序从源串中解析出6个16进制数,并且分别赋值给&mac[i],
当然&#