0

到处搜索,但找不到正确的答案。

问题很简单:

我必须将 ASCII 整数值转换为字符。例如,根据 ASCII 表,108 代表 'h' 字符。但是当我尝试像这样转换它时:

int i = 108
char x = i

当我打印它时,它显示我's',无论我输入什么数字(94,111 ...)。

我也试过这个:

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

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

4

3 回答 3

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,那么您很幸运。这样做您更有可能最终遇到分段错误,因为您最终会访问一些很可能不是您的内存。(而且几乎肯定不是你想要的。)

于 2011-12-09T00:12:43.783 回答
1

听起来你的printf陈述是不正确的。

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

于 2011-12-09T00:12:46.327 回答
0

我猜您的 printf 语句如下所示:

printf("s", x);

..事实上,您可能的意思是:

printf("%s", x);

...这仍然是错误的;这需要一串字符,例如:

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

你真正想要的是:

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

...在我的系统输出£

于 2011-12-09T00:22:58.880 回答