如何将 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
个值,否则你会得到奇怪的结果。
我正在尝试使用类型转换将单个 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
个值,否则你会得到奇怪的结果。