0

次の char* キーがあります。これは、整数またはテキストのいずれかを含むことができる char 配列です。したがって、キーは値 3 または tom を持つことができます。

格納されたデータを含む byte* データ配列があります。キーがデータと等しいかどうかをテストする必要があります。

私のロジックは現在、次のようなものです。

int j = 0 ;
for (j = 0; j < len; j++) {
    sprintf(key_cmp, "%02x", (ulong)*data++);
}
if (!strcmp(key, key_cmp)) fprintf(stderr, "Equal \n");

ここでは char ではなく 16 進数として出力しようとしているため、このコードが正しくないことに気付きました... しかし、%02x を使用しようとすると、ガベージが出力されます。

01 と 1 が同等に扱われるようにするにはどうすればよいですか? これはバイト順によって異なる可能性があることを認識しているため、一般的な解決策は考えられません。私はatoiの使用を避けたいので、別の方法があるかどうか疑問に思っていました(ほとんどの場合、キーが整数かどうかを知る方法がないためです)

ありがとう

4

2 に答える 2

1

問題は、 not a%02xの形式であると推測されます。そのため、システム上で問題が発生する可能性があります。intunsigned longsizeof(int)!=sizeof(long)

書式指定子の説明については、[Wiki][1] を参照してください。

于 2013-02-20T11:04:30.020 に答える
0

char[] は 1 バイトで、byte[] は 1 バイトであるため、バイト配列 (unsigned char) として比較する方が簡単です。どちらも、特別なフォーマットなしで同じことを行います。

memcmp(key,data,len)
strcmp(key,data,len)
于 2013-02-20T14:27:32.670 に答える