如何将 const unsigned char 数组中的元素转换为 char

How to convert elements in const unsigned char array to char

我正在尝试使用类型转换将单个 const unsigned char 数组和 assign/convert 每个元素迭代到一个新的 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] = '[=10=]';
  return new;
}

int main(void) {
    char *num = create_phone_number((const unsigned char[]){ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
    printf("%s\n", num);
    free(num);
    return 0;

}

以上代码的标准输出:

预期标准输出:

1111111111

如何将 nums 中的元素转换为类型 char 和 assign/store 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] = '[=10=]';
  return new;
}

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