【问题标题】:How to convert a integers between 0 and 25 to corresponding ASCII characters?如何将 0 到 25 之间的整数转换为对应的 ASCII 字符?
【发布时间】:2011-09-05 04:54:33
【问题描述】:

假设我有一个数字 0 对应于 ASCII 字符 a。如何将025 范围内的数字转换为字母表中的字母?

我已经尝试将97添加到十进制值,但它只是输出数字+97

typedef enum {
    a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z
} set;

void dispSet(set numbers[], int size_numbers) {
  int i;
  printf("[ ");
  for (i = 0; i < size_numbers-1; i++) {
    printf("%d, ", ((char) numbers[i])+97);
  }
  printf("%d ]", ((char) numbers[size_numbers-1])+97);
  printf("\n");
}

【问题讨论】:

  • 应该将 '%c' 传递给 printf,而不是 %d
  • 哇...对我来说很顺利。谢谢!

标签: c integer decimal character


【解决方案1】:

您应该将%c 传递给printf,而不是%d。格式说明符告诉 printf 如何解释提供的参数。如果您传递%d,它会将参数解释为整数。通过指定%c,你告诉它把参数解释为一个字符。 printf 的手册页/帮助最终会导致一些“格式说明符”,它会为您提供完整列表。

就我个人而言,我倾向于使用someValue + 'a'someValue + 'A',因为我发现按照代码更容易一些。

【讨论】:

    【解决方案2】:

    您可以使用 Character.toChars(x + 97)[0] 来获取 char 值,或者只使用 (char) (x + 97) 进行转换。

    【讨论】:

    • 你希望演员做什么/你打算把它放在哪里?将参数转换为 printf,不会改变 printf 将其解释为数字的事实......
    • char *str = "'.'"; str[1] = 'a' + x;完全避免了强制转换,但仍然依赖于 ASCII(顺序字母代码点)。
    【解决方案3】:

    算法是将“a”添加到您的数字中,您已经通过添加 97 来完成此操作。但是,您应该在 printf 中使用字符说明符而不是小数说明符

     printf("%c", numbers[i] + 'a');
    

    这将是 ascii 字符而不是“控制台”的十进制表示。

    另外,你不需要 typedef。

    【讨论】:

      【解决方案4】:

      更通用的解决方案不假定 ASCII,而是使用编译器的执行字符集。

      char *vec = "abcdefghijklmnopqrstuvwxyz";
      printf("'%c'", vec[0]); //prints 'a'
      

      而且你可以反转操作

      int i = strchr(vec, 'm')-vec;
      

      由于strchr 返回一个指向字符的指针,减去基数得到一个ptrdiff_t,表示两个“点”之间的偏移量,这个偏移量是序列成员的序号。但仅当字符存在时,否则从不属于同一“对象”的两个地址获取ptrdiff 是未定义的行为;你可能会得到一个无意义的负数。

      【讨论】:

        【解决方案5】:
        void dispSet(set numbers[], int size_numbers) {
          int i;
          printf("[ ");
          for (i = 0; i < size_numbers-1; i++) {
            printf("%d, ", ((char) numbers[i]) - '0');
          }
          printf("%d ]", ((char) numbers[size_numbers-1]) - '0');
          printf("\n");
        }
        

        此更改将数字或任何字符转换为其 ASCII 值

        【讨论】:

          【解决方案6】:

          这个答案来晚了

          像这样投射:(char) i

          char c = (char) i // Cast not needed on variable assignment
                            // It's recommended to put it there, no complications needed
          

          对于ing 比赛(以防万一),请适当使用(char)ichar c=i;PPCG.GA 参加此类比赛。

          【讨论】:

            猜你喜欢
            • 2011-12-03
            • 1970-01-01
            • 1970-01-01
            • 2023-04-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-30
            • 2019-09-29
            相关资源
            最近更新 更多