文字列を16進数で印刷するためのこの短い方法は正しいですか? そうでない場合、どのように修正する必要がありますか?
uint8_t *m = string;
int c = sizeof(string);
while(c--){
printf("%02x ", *(m++));
}
「ワンライナー」はありません。さらに、コードが壊れているように見えます。
そのように使用することはできません。sizeof
おそらくstrlen()
.
安全のために、文字を符号なしの型にキャストする必要があります。
したがって、おそらく次のようなものです。
void print_hex(const char *s)
{
while(*s)
printf("%02x", (unsigned int) *s++);
printf("\n");
}
を呼び出さないことに注意してstrlen()
ください。文字列を 2 回繰り返しても意味がないためです。:)
ここで技術的に「文字列」は誤解を招くと思います。値の配列(必ずしも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++);
}