如何将0到25之间的整数转换为相应的ASCII字符?

时间:2011-05-31 04:57:23

标签: c integer decimal character

假设我有一个与ASCII字符0对应的数字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");
}

6 个答案:

答案 0 :(得分:4)

您应该将%c改为printf,而不是%d。格式说明符告诉printf如何解释提供的参数。如果传递%d,它会将参数解释为整数。通过指定%c,您可以告诉它将参数解释为字符。 printf的联机帮助/帮助最终会导致一些'格式说明符',它会为您提供完整的列表。

就个人而言,我倾向于使用someValue + 'a'someValue + 'A',因为我发现遵循代码会更容易。

答案 1 :(得分:2)

算法是对你的数字'a',你已经通过添加97来完成。但是你应该使用字符说明符而不是printf

中的十进制说明符
 printf("%c", numbers[i] + 'a');

这将ascii字符不是'console'的十进制表示。

此外,您不需要typedef。

答案 2 :(得分:2)

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

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

你可以撤销操作

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

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

答案 3 :(得分:2)

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值

答案 4 :(得分:0)

  

这个答案迟到了

像这样投射:(char) i

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

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

答案 5 :(得分:-1)

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