【问题标题】:How to convert elements in const unsigned char array to char如何将 const unsigned char 数组中的元素转换为 char
【发布时间】:2020-10-06 23:51:49
【问题描述】:

我正在尝试遍历单个 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 数组中(高效)?

【问题讨论】:

    标签: arrays c casting type-conversion unsigned-char


    【解决方案1】:

    转换为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 值,或者你'会得到奇怪的结果)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多