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

假设我有一个与ASCII字符a对应的数字0 。 我如何将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 。 格式说明符告诉printf如何解释提供的参数。 如果传递%d ,它会将参数解释为整数。 通过指定%c ,您可以告诉它将参数解释为字符。 printf的联机帮助/帮助最终会导致一些’格式说明符’,它会为您提供完整的列表。

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

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

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

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

此外,您不需要typedef。

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

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

你可以扭转操作

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

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

 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值

这个答案很晚

像这样投: (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为这样的比赛。

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