如何解决如何将const unsigned 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] = '\0';
return new;
}
int main(void) {
char *num = create_phone_number((const unsigned char[]){ 1,1,1 });
printf("%s\n",num);
free(num);
return 0;
}
预期的标准输出:
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] = '\0';
return new;
}
您实际上根本不需要投射它; +
的结果将是int
,并将其存储回一个char
即可完全适合它的状态(因此,请确保它们确实全部为0
- 9
的值,否则您会得到奇怪的结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。