我想转换通过测量压力生成的数组。
所以我得到了一个Integer数组,就像这样,我现在将使用10个样本,但是当它完成时它可能会变成20个值:uint16_t ADCsample[10]= { 245, 332, 124, 98, 5, 156, 68, 199, 2, 105}
如您所见,值范围为0-350,没有负值。
我必须得到这样的输出:outputStr = {2,4,5,3,3,2,1,2,4,0,9,8,0,0,5,1,5,6,0,6,8,1,9,9,0,0,2,1,0,5}
因此,所有整数值都会分开并放入一个新数组中,因此ADCsample[0] = {245}
变为outputStr[0-2] = {2,4,5}
。但是一个或两个数字的样本必须得到值0前面,这是为了使输出具有恒定的长度。
例如:ADCsample[4] = {5}
变为outputStr[12-14]={0,0,5}
我需要将这些数据发送到只有短信的服务器,短信的字符限制为160个字符。所以我必须立即发送完整的outputStr。所有的计算都是在微控制器MSP430G2553上进行的,因此它必须高效且不能用于大量内存。
任何帮助我入门的提示或代码示例,我是一个真正的新手,所以我不知道内置库的许多功能?我可以使用sprintf()或其他函数,还是会用到很多内存?
答案 0 :(得分:1)
此代码正常运行,可以满足您的需求:
#include <stdio.h>
int main(void)
{
unsigned short ADCsample[10]= { 245, 332, 124, 98, 5, 156, 68, 199, 2, 105};
char outputStr[31];
for (unsigned short i = 0; i < 10; i++)
{
outputStr[(i * 3)] = ADCsample[i] / 100 + '0';
outputStr[(i * 3) + 1] = (ADCsample[i] / 10) % 10 + '0';
outputStr[(i * 3) + 2] = ADCsample[i] % 10 + '0';
}
outputStr[30] = '\0';
printf("output : %s\n", outputStr);
return 0;
}
我添加了一个printf来显示结果。 outputStr的大小应该是你的int数组的大小* 3 + 1才能工作。 还应根据int int数组的大小更改for条件。
答案 1 :(得分:0)
您可以使用简单的数学运算从uint16_t
获取三个字符:
uint16_t val = ...;
char hundredsDigit = (val / 100) + '0';
char tensDigit = ((val / 10) % 10) + '0';
char onesDigit = (val % 10) + '0';
当缺少数百和/或数十位数字时,这将产生零。
我需要实际的字符,所以我可以通过我得到的打印功能打印它们,这个函数通常可以一次打印数组中的所有字符。
如果您打算使用打印字符串的函数打印它,则需要对结果进行空值终止。最后添加一个额外的char
,并将其设置为零。
答案 2 :(得分:0)
对于给定的数字,您可以按如下方式获取每个数字:
d1 = num / 100;
d2 = (num % 100) / 10;
d3 = num % 10;
第一次计算将整数除以100,有效地丢弃1和10的数字,留下100位数字。
第二个取剩余部分除以100,留下0到99之间的值,然后将结果除以10,这会使1位数字下降并留下10位数字。
第三个将剩余部分除以100,留下0到9之间的值。