itoa的问题

时间:2014-03-31 11:45:24

标签: string itoa

我正在尝试将一些数据从微控制器发送到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,这就是为什么我要避免意外的字符串终止符。

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

1 个答案:

答案 0 :(得分:0)

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

char tmp_str[4+1];
snprintf(tmp_str, sizeof(tmp_str), "%04d", value);