使用ASCII中的十进制索引获取char

时间:2016-04-05 01:12:23

标签: c int ascii

我如何转换(我不确定这是否是这种情况的正确术语)一个int到一个char,它在ASCII表中将此int作为十进制索引?例如,7是BEL,255是'ÿ'等。

我尝试搜索一个函数或方法来执行此操作,但我能找到的只是人们询问如何从字面上将int转换为char,例如从0到'0'。

3 个答案:

答案 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;
}