c-如何将const无符号char数组中的元素转换为char



我正在尝试迭代单个const unsigned char数组,并使用类型转换将每个元素分配/转换为新的char数组,我读过的每个线程都建议使用类型转换,但它对我不起作用,下面是我的尝试:

#include <stdio.h>
#include <stdlib.h>
char *create_phone_number(const unsigned char nums[10]) {
char *new = malloc(11);
int i = 0;
for (; i<10; i++) 
new[i] = (char)nums[i];
new[i] = '';
return new;
}
int main(void) {
char *num = create_phone_number((const unsigned char[]){ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
printf("%sn", num);
free(num);
return 0;
}

上面代码的stdout:

预期标准输出:

1111111111

如何将nums中的元素转换为类型char,并将转换后的值分配/存储在new数组中(高效(?

转换为char并不意味着将整数值转换为相应的ASCII字符;数值1是ASCII代码SOH(标题的开头(,它没有可打印的表示形式,因此输出为空。如果您知道所有值都在0到9的范围内,您可以将它们添加到ASCII'0'中,以获得产生相关ASCII数字的char值:

char *create_phone_number(const unsigned char nums[10]) {
char *new = malloc(11);
for (int i=0; i<10; i++) 
new[i] = '0' + nums[i];
new[i] = '';
return new;
}

实际上,你根本不需要铸造它;+的结果将是int,它将存储回一个可以毫无问题地容纳它的char(所以只需确保它们真的都是0-9值,否则你会得到奇怪的结果(。

最新更新