到处搜索,但无法得到正确答案。
问题很简单:
我必须将ASCII整数值转换为char。 例如,根据ASCII表,108代表'h'char。但是,当我尝试将其转换为:
int i = 108
char x = i
当我打印它时,它显示我的',无论我输入的是什么号码(94,111 ......)。
我也试过这个:
int i = 108;
char x = i + '0'
但是我遇到了同样的问题!顺便说一下,我把字符转换成整数是没有问题的,所以我不知道问题出在哪里:/ 提前谢谢
答案 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);
...我的系统输出£