0

我正在尝试将一些数据从微控制器发送到 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'

(我当时在一个端口进行AD转换,这就是我可以重用ADC_string的原因)。large_string 稍后将发送到 PC,这就是我要避免意外字符串终止符的原因。

有没有人知道如何以一种很好的方式实现这一点?我很感谢任何建议!

4

1 回答 1

0

只需使用snprintfitoa不会为您添加填充:

char tmp_str[4+1];
snprintf(tmp_str, sizeof(tmp_str), "%04d", value);
于 2014-03-31T11:57:41.397 回答