到处搜索,但找不到正确的答案。
问题很简单:
我必须将 ASCII 整数值转换为字符。例如,根据 ASCII 表,108 代表 'h' 字符。但是当我尝试像这样转换它时:
int i = 108
char x = i
当我打印它时,它显示我's',无论我输入什么数字(94,111 ...)。
我也试过这个:
int i = 108;
char x = i + '0'
但我遇到了同样的问题!顺便说一句,我将字符转换为整数没有问题,所以我不知道问题出在哪里:/提前谢谢
你就是这样做的。不过,您可能希望它未签名。
也许你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
,那么您很幸运。这样做您更有可能最终遇到分段错误,因为您最终会访问一些很可能不是您的内存。(而且几乎肯定不是你想要的。)
听起来你的printf
陈述是不正确的。
执行printf("%c", c)
where c 的值为 108 将打印该字母l
...如果您查看http://www.asciitable.com/您会发现 108 不是h
;)
我猜您的 printf 语句如下所示:
printf("s", x);
..事实上,您可能的意思是:
printf("%s", x);
...这仍然是错误的;这需要一串字符,例如:
char* x = "Testing";
printf("%s", x);
你真正想要的是:
int i = 108;
char x = i + '0';
printf("%c", x);
...在我的系统输出£