scanf格式的字符串(带破折号)

| 我正在尝试编写一个C函数来解析输入的MAC地址,用空格,冒号或破折号作为分隔符。我一直在研究使用ѭ0来匹配多个字符,但是它似乎无法检测到空格字符(例如空格),而且还会产生带有破折号的错误值认为数字是负数。 我的函数看起来像:
scanf(\"%2x%*[-:]%2x\", &hex1, &hex2);
一次扫描可以吗?还是还有其他更好的方法?谢谢。     
已邀请:
我不知道它的便携性,或者它是否完全符合您的要求。
#include <stdio.h>

int main()
{
    unsigned a;
    while (scanf(\"%02x%*[-: ]\", &a) == 1) {
        fprintf(stdout, \"%02x\\n\", a);
    }
    return 0;
}
使用此输入(第一个十六进制数字后的制表符,最后一个十六进制数前的空格):
a0  b1-01:ff-:-b0 55
它产生以下输出:
a0
b1
01
ff
b0
55
如果您在同一呼叫中需要多个项目,请尝试一些变体(使用空格或制表符作为分隔符):
#include <stdio.h>

int main()
{
    unsigned a,b,c;
    while (scanf(\"%02x%*[-: \\t]%02x%*[-: \\t]%02x%*[:-]\", &a, &b, &c) == 3) {
        fprintf(stdout, \"%02x %02x %02x\\n\", a, b, c);
    }
    return 0;
}
上面的输入给出了这一点:
a0 b1 01
ff b0 55
    

要回复问题请先登录注册