我如何转换(我不确定这是否是这种情况的正确术语)一个int到一个char,它在ASCII表中将此int作为十进制索引?例如,7是BEL,255是'ÿ'等。
我尝试搜索一个函数或方法来执行此操作,但我能找到的只是人们询问如何从字面上将int转换为char,例如从0到'0'。
答案 0 :(得分:0)
在C中,char可以定义如下
int a = 'a';
char b = 'a';
assert(a == b);
即使开启警告,它也不会发出警告,因为它有效。
请注意,a的类型为int
。危险在于这样做
//some_integer might be 16/32/64... bits
int a = some_integer;
char b = some_integer;
assert(a == b);
这可能会失败,因此您需要检查它。通过尝试这样的事情,你可以看到危险......
int test = 353;
char c = test;
assert(a == c);
printf("c=%c\n", c);
断言在上面的代码中没有失败,因为
97 == (353 % 256)
这是ASCII中a
的字符代码。
注意,危险在于你没有达到你的期望。
if(some_integer <= 127 && some_integer >= 0) {
//It's valid 7 bit ASCII
char ascii_char_7bit = some_integer;
}
如果你想要8位,你会使用
if(some_integer <= 255 && some_integer >= 0) {
//It's valid 7 bit ASCII
char ascii_char_7bit = some_integer;
}
答案 1 :(得分:0)
这是一个显示概念的简单程序。它根据您的要求使用decimal index
:
#include <stdio.h>
#include <stdlib.h>
main(argc, argv)
{
unsigned char charTable[256];
int i;
for(i=0;i<256;i++) { // populate table
charTable[i] = i & 255;
}
printf("%c\n", charTable[97]); // lower case 'a'
printf("%c\n", charTable[34]); // double quote
for(i=65;i<65+26;i++) { // upper case alphabet
printf("%c",charTable[i]);
}
printf("\n");
for(i=97;i<97+26;i++) { // lower case alphabet
printf("%c",charTable[i]);
}
printf("\n");
}
答案 2 :(得分:0)
无需转换。你的问题解释了C在内部做了什么(将一个int转换为一个char,它将这个int作为ASCII表中的十进制索引... )
请参阅以下代码:
#include <stdio.h>
int main()
{
int index;
char c;
printf("Enter the ASCII index: ");
scanf("%d", &index);
c = index;
printf("The ASCII char is %c\n", c);
return 0;
}