uint8_t [uint8_t lets_try[16]] の配列を 16*8+1[null character] 要素の文字列に「変換」しようとしています。例えば:
lets_try[0] = 10101010
lets_try[1] = 01010101
...
次のような文字列が必要です。
1010101001010101...[\0]
ここで質問: 1) この操作を実行する簡単な方法はありますか?
私は自分でやろうとしていました。私のアイデアは、単一の uint8_t 変数を文字列に変換し、ループで完全な配列を取得することから始めていました [この最後の部分はまだ行っていません]。最後に、私はこのコードを書きました:
int main()
{
uint8_t example = 0x14;
uint8_t *pointer;
char *final_string;
pointer = &example;
final_string = convert(pointer);
puts(final_string);
return(0);
}
char *convert (uint8_t *a)
{
int buffer1[9];
char buffer2[9];
int i;
char *buffer_pointer;
buffer1[8]='\0';
for(i=0; i<=7; i++)
buffer1[7-i]=( ((*a)>>i)&(0x01) );
for(i=0; i<=7; i++)
buffer2[i] = buffer1[i] + '0';
buffer2[8] = '\0';
puts(buffer2);
buffer_pointer = buffer2;
return buffer_pointer;
}
ここで他のいくつかの質問:
2) オンラインで見つけた次の式の魔法を完全に理解しているかどうかはわかりません: buffer2[i] = buffer1[i] + '0'; 次の puts(buffer2) が +'0' なしでは正しく動作しない理由を誰かが説明してくれませんか? puts() を機能させるのは、生まれたばかりの文字列の末尾にあるヌル文字ですか? [ヌル文字を使用すると、実際の文字列を出力していることがわかるので?]
3) 上記のコードで puts(buffer2) は正しい出力を提供しますが、main() の puts は何も提供しません。コードを何度も見直して気が狂いそうです。何が悪いのかわかりません。
4) 私のソリューションでは、uint8_t を int の配列から渡される文字列に変換することに成功しました: uint8_t->int array->string; uint8_t から文字列に直接渡して、この手順を短縮する方法、または改善する方法はありますか? [フォーラムでは C++ のソリューションしか見つかりませんでした] 動作しますが、少し重く、エレガントではありません。
みんな応援ありがとう