将整数转换为C中的字符(根据ASCII表)

时间:2011-12-09 00:05:43

标签: c integer chars

到处搜索,但无法得到正确答案。

问题很简单:

我必须将ASCII整数值转换为char。 例如,根据ASCII表,108代表'h'char。但是,当我尝试将其转换为:

int i = 108
char x = i

当我打印它时,它显示我的',无论我输入的是什么号码(94,111 ......)。

我也试过这个:

int i = 108;
char x = i + '0'

但是我遇到了同样的问题!顺便说一下,我把字符转换成整数是没有问题的,所以我不知道问题出在哪里:/ 提前谢谢

3 个答案:

答案 0 :(得分:1)

你就是这样做的。但是你可能希望它没有签名。

也许你的printf错了?

以下是它的工作示例:

// Print a to z.
int i;
for (i = 97; i <= 122; i++) {
    unsigned char x = i;
    printf("%c", x);
}

按预期打印abcdefghijklmnopqrstuvwxyz。 (见ideone

注意,您也可以直接printf("%c", i);; char只是一个较小的整数类型。

如果您尝试printf("%s", x);,请注意这是不正确的。 %s表示打印为字符串,但字符不是字符串。

如果你这样做,它会将x的值视为内存地址,并从那里开始读取一个字符串,直到它到达\0。如果这仅仅导致打印s,那么你很幸运。你更有可能最终得到一个分段错误,因为你最终会访问一些很可能不是你的内存。 (而且几乎肯定不是你想要的。)

答案 1 :(得分:1)

听起来我的printf声明不正确。

执行printf("%c", c),其中c的值为108将打印字母l ...如果您查看http://www.asciitable.com/,您会看到108不是h; )

答案 2 :(得分:0)

我猜你的printf语句是这样的:

printf("s", x);

..实际上你可能意味着:

printf("%s", x);

......这仍然是错的;这是期待一串字符,例如:

char* x = "Testing";
printf("%s", x);

你真正想要的是:

int i = 108;
char x = i + '0';
printf("%c", x);

...我的系统输出£