我正在尝试从微控制器向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'“。这样做的原因是,我希望将结果放在不同位置的大字符串中。e.g
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,这就是我要避免意外字符串终止符的原因。
有没有人知道如何以一种好的方式实现这一点?非常感谢您的建议!
发布于 2014-03-31 19:57:41
只需使用snprintf,itoa不会为您添加填充:
char tmp_str[4+1];
snprintf(tmp_str, sizeof(tmp_str), "%04d", value);https://stackoverflow.com/questions/22760732
复制相似问题