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

3

我正在尝试迭代一个单一的 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] = '\0';
  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类型并有效地将转换后的值分配/存储到new数组中?
1个回答

0
转换为 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] = '\0';
  return new;
}

你实际上根本不需要进行强制转换; + 的结果将是一个 int 并且它将存储回一个可以容纳它的 char 中,而无需问题(因此只需确保它们真的都是 0 - 9 值,否则您会得到奇怪的结果)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接