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