用sscanf格式化MAC地址
来源:互联网 发布:js高分子防水涂料 编辑:程序博客网 时间:2024/05/16 17:38
今天要从配置文件中读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],
当然,在X86的机器上,整数的最低位恰好放在指定的mac[i]中,高位则覆盖其后的mac[i+1],...的内容,
所以在我的X86机器上运行程序是正确的,但是到了PowerPC上,
地址的低位放的是整数的高位内容,所以mac[]数组被清0。
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],
当然,在X86的机器上,整数的最低位恰好放在指定的mac[i]中,高位则覆盖其后的mac[i+1],...的内容,
所以在我的X86机器上运行程序是正确的,但是到了PowerPC上,
地址的低位放的是整数的高位内容,所以mac[]数组被清0。
我真正需要的格式串,其实是要指定后面指针类型的,被称为type modifier characters的东东
查看手册,hh正是我想要的东西,最后的格式串改成
"%hhX:hhX:hhX:hhX:hhX:hhX"
一切OK了
- 用sscanf格式化MAC地址
- 用sscanf判断ip地址的正确性
- Matlab 格式化字符串sscanf
- sscanf()--字符串格式化输入
- sscanf(格式化字符串输入)
- sscanf(格式化字符串输入)
- sscanf--格式化转换字符数组
- C语言字符串格式化处理 sscanf函数
- C语言sscanf函数格式化参数用户手册
- 从字符串格式化输入数据:sscanf
- MAC地址
- MAC地址
- MAC地址
- MAC地址
- MAC地址
- MAC地址
- Mac地址
- MAC地址
- 新手.net 2.0提问)如何修改DataView的数据更新到数据源?
- CSS规则层叠时的优先级算法 - lunaticsun.com - CSDNBlog
- continuum1.1,svn,maven2 试用笔记
- ActiveDirectory学习日记(一)
- 6-用过一些JS-Tree控件之后的总结【将持续更新】
- 用sscanf格式化MAC地址
- U-Boot的常用命令详解
- Javascrīpt 通用库
- string
- 打开新的窗口并传送参数
- 毕业实习(2)
- 处理XML数据
- 单击一个CheckBox时选中所有子CheckBox
- 在C#中使用owc11 画折线图