C++ MAC地址解析

C++ MAC地址解析,c++,parsing,mac-address,C++,Parsing,Mac Address,我有一个类似“6F:e:5B:7C:b:a”的MAC地址,我想在:e:,:b:,:a之前解析并插入隐式零 我现在不能使用Boost,但我有一个粗略的解决方案。解决方案在“:”上拆分。然后我计算介于和之间的字符,如果只有一个,我在前面插入一个零 我想知道是否有人有更快的方法?首先,您可以使用将char转换为int的脚本,因此: unsigned char hex_to_int(const char c) { if( c >= 'a' && c <= 'f'){

我有一个类似“6F:e:5B:7C:b:a”的MAC地址,我想在:e:,:b:,:a之前解析并插入隐式零

我现在不能使用Boost,但我有一个粗略的解决方案。解决方案在“:”上拆分。然后我计算介于和之间的字符,如果只有一个,我在前面插入一个零


我想知道是否有人有更快的方法?

首先,您可以使用将
char
转换为
int
的脚本,因此:

unsigned char hex_to_int(const char c)
{
    if( c >= 'a' && c <= 'f'){
        return c - 'a' + 10;
    }

    if( c >= 'A' && c <= 'F'){
        return c - 'A' + 10;
    }

    if( c >= '0' && c <= '9'){
        return c - '0';
    }

    return 0;
}
无符号字符十六进制到整数(常量字符c)
{

如果(c>='a'&&c='a'&&c='0'&&c用于快速和肮脏:

if (sscanf(text, "%x:%x:%x:%x:%x:%x",
           &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]) != 6) {
    // handle error
}

注意,它不检查数字是否真的十六进制。通常使用sScFiffe(.SpCff)的预防。

认为你的方法是要去的。可能的二:在C++中没有类似于<代码> StastFf()/C++的参数格式化吗?@ DanilAsotsky是相似的,但我相信它们使用的不是C,C++,我更喜欢C++。我打赌sscanf+snprintf将提供最好的性能
if (sscanf(text, "%x:%x:%x:%x:%x:%x",
           &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]) != 6) {
    // handle error
}