如何将列表转换为字符串

时间:2014-04-08 14:31:52

标签: c embedded

C编程中的问题

我有以下列表:

int a[] = {0,0,1,0,0,1,0,2}

如何将以下列表项转换为char变量 b

像这样:

printf(%c, b) OUTPUT: 00100102

我需要这个来打印嵌入式系统液晶屏幕中列表的值,而普通打印选项不可用。无法从www.stackoverflow.com找到类似的例子。反之亦然,有很多解决方案可以将字符串转换为列表。

4 个答案:

答案 0 :(得分:2)

int a = [0,0,1,0,0,1,0,2]

这不是有效的C.也许你的意思是:

const int a[] = { 0, 0, 1, 0, 0, 1, 0, 2 };

将十进制数字转换为C中的可打印字符非常简单,只需添加'0'

printf("%c", '0' + a[0]);

将打印0

答案 1 :(得分:2)

#include <stdio.h>
#include <stdlib.h>

int main(){
    int a[] = {0,0,1,0,0,1,0,2};
    const char *table = "0123456789";
    size_t size = sizeof(a)/sizeof(*a);
    char *b = malloc(size+1);
    int i;
    for(i=0;i<size;++i)
        b[i]=table[a[i]];
    b[i]='\0';
    printf("%s\n", b);
    free(b);
    return 0;
}

答案 2 :(得分:0)

您可以遍历数组的元素,并printf()每个元素,将其视为'0'的偏移量:

/*

'0' + 0 = '0'
'0' + 1 = '1'
'0' + 2 = '2'

*/

const int a[] = {0,0,1,0,0,1,0,2};
const int count = sizeof(a) / sizeof(a[0]);
int i;

for (i = 0; i < count; i++) {
    printf("%c", '0' + a[i]);
}
printf("\n");

答案 3 :(得分:-1)

当您将int数组中的每个值转换为char数组中的相应值时,您只需要一个char数组。将空终止符\0(或0)附加到char数组时,它将变为C字符串。

int a[] = {0,0,1,0,0,1,0,2}; //use curly braces to assign values to new array.
char b[sizeof(a)/sizeof(a[0])+1];//Accomodates any size of a.  note extra space for terminating \0
int i;
//EDIT 5 following lines
b[0]=0; //ensure string is null terminated
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
    sprintf(b, "%s%d", b, a[i]);//copy one char per loop to concatenate string with all elements of `a`  
}

现在你有一个字符串,根据a中的数组元素的数量来确定大小如下:
“00100102”
在内存中 ,您会看到 | 48 | 48 | 49 | 48 | 48 | 49 | 48 | 50 | 0 |
(整数0,1和2的每个字符表示的整数值,在最后一个位置用空字符0标记字符串的结尾。)

还注意 ,短语sizeof(array)/sizeof(array[0])用于获取数组中元素的数量。