1. ホーム
  2. c

[解決済み] C言語でバイト配列から16進文字列に変換するには?

2023-01-01 05:16:10

質問

私は持っています。

uint8 buf[] = {0, 1, 10, 11};

バイト配列を文字列に変換して、printfで文字列を出力できるようにしたい。

printf("%s\n", str);

と取得します(コロンは必要ありません)。

"00:01:0A:0B"

何かお手伝いいただけることがあれば、ぜひお願いします。

どのように解決するのですか?

printf("%02X:%02X:%02X:%02X", buf[0], buf[1], buf[2], buf[3]);

より一般的な方法として

int i;
for (i = 0; i < x; i++)
{
    if (i > 0) printf(":");
    printf("%02X", buf[i]);
}
printf("\n");

文字列に連結するためには、いくつかの方法があります。私なら、文字列の末尾へのポインタを保持しておき、sprintfを使うでしょう。また、配列が割り当てられたスペースより大きくならないように、サイズを記録しておく必要があります。

int i;
char* buf2 = stringbuf;
char* endofbuf = stringbuf + sizeof(stringbuf);
for (i = 0; i < x; i++)
{
    /* i use 5 here since we are going to add at most 
       3 chars, need a space for the end '\n' and need
       a null terminator */
    if (buf2 + 5 < endofbuf)
    {
        if (i > 0)
        {
            buf2 += sprintf(buf2, ":");
        }
        buf2 += sprintf(buf2, "%02X", buf[i]);
    }
}
buf2 += sprintf(buf2, "\n");