10

文字列を16進数で印刷するためのこの短い方法は正しいですか? そうでない場合、どのように修正する必要がありますか?

uint8_t *m = string;
int c = sizeof(string);
while(c--){
    printf("%02x ", *(m++));
}
4

2 に答える 2

21

「ワンライナー」はありません。さらに、コードが壊れているように見えます。

そのように使用することはできません。sizeofおそらくstrlen().

安全のために、文字を符号なしの型にキャストする必要があります。

したがって、おそらく次のようなものです。

void print_hex(const char *s)
{
  while(*s)
    printf("%02x", (unsigned int) *s++);
  printf("\n");
}

を呼び出さないことに注意してstrlen()ください。文字列を 2 回繰り返しても意味がないためです。:)

于 2012-10-04T10:20:18.253 に答える
3

ここで技術的に「文字列」は誤解を招くと思います。値の配列(必ずしもnullで終わるとは限りません)を出力しているようuint8_tです。

いずれにせよ、ループが必要になります。C99 を使用できる場合は、次のように記述できます。

for (size_t i = 0; i < sizeof(string); ++i) printf("%02x", string[i]);

配列null で終了し、元の値が必要ない場合string(これは、ポインターを値で渡すときによくあるケースです)、次のようにすることができます。

static void printArray(const uint8_t *string)
{
  while (*string) printf("%02x", *string++);
}
于 2012-10-04T10:30:49.000 に答える