如何将0到25之间的整数转换为相应的ASCII字符?
假设我有一个与ASCII字符a
对应的数字0
。 我如何将0
到25
范围内的数字转换为字母表中的字母?
我已经尝试将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)i
和char c=i;
适当。 PPCG.GA为这样的比赛。
您可以使用Character.toChars(x + 97)[0]来获取char值,或者只使用(char)(x + 97)进行转换。