将整数数组转换为字符数组,每个整数每 3 位

Converting an Integer array to a char array, with every 3 digit per 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 个字符或类似字符限制的 SMS 的服务器。所以我必须立即发送完整的 outputStr。此外,所有计算都是在微控制器 MSP430G2553 上完成的,因此它必须高效且不会占用太多内存。

有什么提示或代码示例可以帮助我入门吗,我是这方面的新手,所以我不知道内置库的很多功能?我可以使用 sprintf() 或其他函数吗?这会占用很多内存吗?

您可以通过简单的数学运算从uint16_t中获得三个字符:

uint16_t val = ...;
char hundredsDigit = (val / 100) + '0';
char tensDigit = ((val / 10) % 10) + '0';
char onesDigit = (val % 10) + '0';

当缺少数百 and/or 个十位数字时,这将产生零。

I need actual characters so I can print them through the print function that I got, this function can normally print all the characters in an array at once.

如果您希望使用打印字符串的函数来打印此内容,则需要以空值终止结果。在末尾添加一个额外的char,并将其设置为零。

对于给定的数字,您可以按如下方式获取每个数字:

d1 = num / 100;
d2 = (num % 100) / 10;
d3 = num % 10;

第一个计算将整数除以 100,实际上去掉了 1 和 10 的数字,剩下的是 100 的数字。

第二个取除以 100 的余数,留下 0 到 99 之间的值,然后将结果除以 10,去掉 1 的数字,留下 10 的数字。

第三个取除以 100 的余数,留下 0 到 9 之间的值。

这段代码可以正常工作并且可以满足您的要求:

#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] = '[=10=]';
    printf("output : %s\n", outputStr);
    return 0;
}

我添加了一个 printf 来显示结果。 outputStr 的大小应该是您的 int 数组的大小 * 3 + 1 才能正常工作。 此外,应根据您的 int 数组的大小更改 for 条件。