运行以下代码会打印b = and i = 15
。
int i = 15;
char b = (char) i;
printf("b = %c and i = %d\n", b, i);
如何在角色中存储此整数?最后,我正在尝试使用大小为1024的char数组,其中i
(15)为第一个字符,其余为0。
更新:我试过了:
int i = 15;
char buffer[1024];
snprintf(buffer, 10, "%d", i);
printf("buffer[0] = %c, buffer[1] = %c\n", buffer[0], buffer[1]);
打印结果是:
缓冲区[0] = 1,缓冲区[1] = 5
答案 0 :(得分:2)
您确实在字符中存储了整数,只是%c
将字符转换为ASCII值。低于31的所有ASCII值都是不可打印的。
如果你跑
printf("b = %d and i = %d\n", (int)b, i);
它将打印15。
如果您希望将i
表示为字符串:
char buf[12]; //Maximum number of digits in i, plus one for the terminating null
snprintf(buf, 12, "%d", i);
这将在i
中存储buf
的字符串表示形式。
答案 1 :(得分:1)
这里的问题是,变量b
已经有一个值15
但由于这不构成可打印的ASCII,使用%c
格式说明符,您将无法看到任何输出。
要打印该值,请使用%hhd
格式说明符。
最后我想要一个大小为1024的char数组,其中i(15)为第一个字符,其余为0.
那么,您可以定义一个数组并相应地赋值。像
这样的东西#define SIZE 1024
char arr [SIZE] = {0}; //initialization, fill all with 0
arr[0] = 15; //first value is 15
应该做的。
答案 2 :(得分:1)
char是一个8位无符号值(0 - 255),它确实存储了15,问题是,在ASCII表15中意味着“移入”不可打印的字符,%c解释值作为ascii字符。
char b = (char) i;
printf("b = %d and i = %d\n", b, i);
获取
b = 15且i = 15
如果您在当前代码中使用了i = 90
,则会打印出来:
b = Z且i = 90
答案 3 :(得分:1)
澄清:
char的范围是-128..127。 unsigned char的范围是0..255。
如果捕获ASCII值是目标,则将缓冲区变量声明为unsigned char类型似乎更合适。
答案 4 :(得分:0)
您无法在Character数据类型(数据类型冲突)中存储Integer数据类型。 但是你想要的,可以通过采用二维字符数组来实现。
char b[1024][1024];
itoa(i,b[0],20); ///
for(int i = 1 ; i < 1024 ; i++)
itoa(0,b[i],20);
函数 itoa 将整数转换为字符数组并将其存储到字符数组中。希望能帮助到你。