2

スペース、コロン、またはダッシュを区切り文字として使用して、MAC アドレス入力を解析する C 関数を作成しようとしています。複数の文字を一致させるために使用することを検討してきましたが%*[-:]、空白文字 (スペースなど) を検出できないようです。また、数値が負であると考えられるため、ダッシュで間違った値が生成されます。 .

私の関数は次のようになります。

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

1回のスキャンで可能ですか?または、他に良い方法はありますか?ありがとう。

4

1 に答える 1

1

これがどれほど移植性があるか、または要件に正確に一致するかどうかはわかりません。

#include <stdio.h>

int main()
{
    unsigned a;
    while (scanf("%02x%*[-: ]", &a) == 1) {
        fprintf(stdout, "%02x\n", a);
    }
    return 0;
}

この入力 (最初の 16 進数の後にタブ、最後の前にスペース):

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
于 2011-04-15T06:35:24.320 に答える