【问题标题】:converting integers to chars in C(according to ASCII table)在 C 中将整数转换为字符(根据 ASCII 表)
【发布时间】:2011-12-09 00:05:43
【问题描述】:

一直在到处寻找,但找不到正确的答案。

问题很简单:

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

int i = 108
char x = i

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

我也试过这个:

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

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

【问题讨论】:

  • 请复制粘贴实际代码;这些片段无法编译,尝试调试从未运行过的东西通常没有意义。
  • 请注意decimal value 108 is actually lowercase l,而不是s 或h。你在哪里找到s 或h?
  • 请告诉我们您的 printf 调用方式。
  • 对不起,108 代表 'l',但它没有任何区别。完整代码如下: int i = 108;字符 x = i; printf("%s\n", x);当我编译它时,它显示's'字符(并且没有错误),我不知道为什么..

标签: c integer chars


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

【讨论】:

    【解决方案2】:

    在我看来,您的 printf 声明不正确。

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

    【讨论】:

    • 它有效!我写的是 %s 而不是 %c,愚蠢的我。非常感谢您,很抱歉浪费您的时间。
    • 解释了为什么你每次都看到s!一点也不浪费时间,每个人都会犯这些错误。
    【解决方案3】:

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

    printf("s", x);
    

    ..事实上你可能是说:

    printf("%s", x);
    

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

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

    你真正想要的是这个:

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

    ...在我的系统上输出£

    【讨论】:

      猜你喜欢
      • 2011-10-03
      • 2013-01-13
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多