マイクロコントローラーからPCにデータを送信しようとしています。データは、異なるポートからの 10 ビット ADC 変換 (0 ~ 1023 の数値など) です。この数値を整数として保存したので、itoa または同様の関数を使用して、これを ASCII 文字列に変換したいと思います。私の問題は、itoa 関数のドキュメントを見つけるのに苦労していることです。たとえば、AD変換から「1011」という数字を受け取った場合。次に、次のように itoa を呼び出すことができます
itoa(AD_value,ADC_string,10); //itoa("value", char* destination, base)
ADC_string の結果は、「1 0 1 1 '\0'」、たとえば 1011 になります。しかし、代わりに AD 変換から数値 5 を受け取ったとします。結果は代わりに "5 '\0' Null Null Null" になります (itoa がどのように正しく動作するかを理解していれば)。代わりに、結果が「0 0 0 5 '\0'」であってほしかったでしょう。この理由は、結果を別の場所にある大きな文字列に配置したいからです。例えば
large_string[0]=id_PC;
large_string[1]=ADC_string[0]; //start of ascii string of the latest value from a port
large_string[2]=ADC_string[1];
large_string[3]=ADC_string[2];
large_string[4]=ADC_string[3];
および別のポートの場合 (インデックス 5 & 6 の large_string には他のものが存在します)
large_string[7]=ADC_string[0]; //start of ascii string of the latest value from another port
large_string[8]=ADC_string[1];
large_string[9]=ADC_string[2];
large_string[10]=ADC_string[3];
つまり、上記の例に従って、次のように large_string を使用したいと思います。
large_string[0]=id_PC
// an AD conversion from the first port is stored at index 1-4
large_string[1]='1'
large_string[2]='0'
large_string[3]='1'
large_string[4]='1'
large_string[5]=' '
large_string[6]=' '
// a new AD conversation from the second port is stored at index 7-10
large_string[7]='0'
large_string[8]='0'
large_string[9]='0'
large_string[10]='5'
large_string[11]='\0'
(一度に 1 つのポートで AD 変換を行います。これが、ADC_string を再利用できる理由です)。large_string は後で PC に送信されるため、意図しない文字列ターミネータを避けたいと考えています。
これをうまく実装する方法を知っている人はいますか? 提案に感謝します!