用sscanf格式化MAC地址

本文介绍了在处理MAC地址时,如何利用sscanf的type modifier characters,特别是'hh',来正确格式化并解析十六进制数值。通过将格式串设置为'%hhX:hhX:hhX:hhX:hhX:hhX',问题得到了解决。
摘要由CSDN通过智能技术生成
今天要从配置文件中读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是一个用于从字符串中读取数据的函数。它的格式化参数可以告诉函数如何解析字符串,并将解析的结果存储在其他变量中。sscanf函数有多种语法和格式,根据引用和引用[2]可以看出,C语言中的sscanf函数使用的是const char*类型的参数,而PHP中的sscanf函数使用的是string类型的参数。这两个函数的功能基本相同,都是根据给定的格式解析字符串并将解析的结果存储在其他变量中。不同的是,C语言中的sscanf函数可以使用"..."表示可变参数,而PHP中的sscanf函数需要明确指定参数个数。根据引用中的描述,sscanf函数的返回值是输出的字符串的长度。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【C语言】格式化字符串printf()、sprintf()、scanf()、sscanf()函数详解](https://blog.csdn.net/xiaoxiaoguailou/article/details/121306953)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [c语言函数库学习~sscanf~格式化输入](https://blog.csdn.net/weixin_30652897/article/details/99523826)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值