在C中的char数组中存储一个整数

时间:2017-04-08 21:05:42

标签: c arrays char

运行以下代码会打印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

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 将整数转换为字符数组并将其存储到字符数组中。希望能帮助到你。

click here for more info :)