【问题标题】:Getting a char using its decimal index from ASCII [closed]使用 ASCII 的十进制索引获取字符 [关闭]
【发布时间】:2016-04-05 01:12:23
【问题描述】:

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

我尝试搜索一个函数或方法,但我能找到的只是人们询问如何从字面上转换 int 到 char,例如从 0 到“0”。

【问题讨论】:

  • ASCII 是 7 位代码,仅定义代码 0..127。而且你的问题太笼统了。你试过什么?发布您的代码以及您的具体问题所在。
  • 如果 int 在 0..127 之间,您可以将其视为 char。无需转换。
  • char 是整数类型。 C 不像其他一些编程语言那样具有独特的字符类型。
  • 我之前在代码中从十六进制数字字符串到整数的转换不正确。现在它适用于低于 127 的整数,就像你说的那样。我需要能够使用从一开始就采用字符串形式的十六进制值来选择 BMP 图像中的像素。我将这些字符串转换为十进制整数,现在我可以选择 RGB 值为 0x7F(即 127)及以下的像素。我如何使用 128 到 255 的整数来比较图片中 RGB 值高于 0x7F 的其余字节?

标签: c int ascii


【解决方案1】:

无需转换。您的问题解释了 C 在内部执行的操作(将 int 转换为 char,在 ASCII 表中将此 int 作为十进制索引...

见以下代码:

#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;
}

【讨论】:

    【解决方案2】:

    在 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)
    

    这是a的ASCII字符代码。

    注意,危险在于你没有得到你所期望的。

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

    【讨论】:

      【解决方案3】:

      这是一个显示概念的简单程序。它按照您的要求使用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");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-05
        • 1970-01-01
        • 2014-01-02
        • 2014-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多