2011-04-15 58 views
1

我想寫一個C函數來解析MAC地址輸入,以空格,冒號或破折號作爲分隔符。我一直在尋找使用%*[-:]來匹配多個字符,但它似乎無法檢測到一個空格字符(例如空格),並且它會使用破折號產生錯誤的值,因爲它認爲數字是負。scanf格式化字符串用破折號十六進制

我的功能看起來像:

scanf("%2x%*[-:]%2x", &hex1, &hex2); 

是否有可能在一個scanf函數?或者還有其他更好的方法嗎?謝謝。

+1

如果是我,我可能會寫上幾行額外打開破折號和空格成':'然後寫一個簡單的'的sscanf(3) '規則。 – sarnold 2011-04-15 06:11:35

回答

1

我不知道這是多麼便攜,或者它完全符合您的要求。

#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 
相關問題