【问题标题】:Get ASCII character from number in C/C++ [closed]从 C/C++ 中的数字获取 ASCII 字符 [关闭]
【发布时间】:2012-01-19 11:34:23
【问题描述】:

我的要求是,当我输入一个数字(比如 01 - 100)时,我应该能够获得该数字的 ASCII 码值。

例如:01 = A, 02 = B, 03 = C, 以此类推...., 90 = Z, 如果数字是 91 = AA, 92 = AB, 93 = AC, 等等...

我可以通过谷歌搜索等...将 int 转换为 char,获取 ASCII 值,但这仅在使用“%c”打印时发生,但无法保存为 CHAR 或 STRING。

例如:

int inputNumber=5;  
char getASCIICharValue = (char)inputNumber;  
printf("\n getASCIICharValue: %c  \n", getASCIINumberValue);  
// Above would print 'E' which is correct  
printf("\n getASCIICharValue as char: %s  \n", getASCIINumberValue);  
// Above results in a RUN-TIME error.  

在打印时,它会正确打印值,但在将其保存到 String 或 Char 时却不能。


真的很抱歉没有正确发布我的问题,可能是我无法正确提出问题,因为这是我的第一篇文章......

我正在编辑我的帖子,这可能不太清楚......

我输入的输入将是 1(或任何整数,比如 1 - 100),我应该能够以十进制获得该数字的 ASCII 表示...

假设1是65,目前我正在做的是,我先减1,然后加65...

例如:如果输入为 5,则为 5 - 1 + 65 =

69,代表大写字母E

如果输入是15,我的输出应该是大写O

希望这不太清楚......

【问题讨论】:

  • 我不知道你指的是什么转换表,但如果A = 01,可能不是ASCII。
  • 'A' 的 ASCII 值是 65(十进制)...你到底想做什么?
  • 你的问题有很多问题。首先,“01 = A .. 90 = Z”表示字母表中有 90 个字母。正确的?你确定“Above will print 'E'”是真的吗?
  • @all: 可能是我无法正确提出问题,因为这是我的第一篇文章...
  • @Sudheer:您可以对其进行编辑并使其更清晰,以便我们了解您的需求。如果我们不了解您想要什么,我们将无法帮助您。

标签: c++ c ascii


【解决方案1】:

您正在那里定义自己的字符编码。

除以十并迭代取模十以获取数字,然后使用

char to_ascii (int i) {
    return 'A' + i - 1;
}

// ...

assert (to_ascii(0x01) == 'A');

char buffer [20] = {0};
for (...) {
    buffer [i] = to_ascii (n);
}

printf (buffer);

你到底是怎么得到90='Z'的?

【讨论】:

  • to_ascii(0) 产生'A' + 0 - 1,即@。所以,编码100 会得到A@@
  • 是的,但这似乎是由于他没有明确说明的问题。
【解决方案2】:

您得到的运行时错误是因为%s 需要一个指向以空字符结尾的字符数组的指针。你正在传递一个字符。这样做会产生未定义的行为。幸运的是,您遇到了一个运行时错误,这使得 bug 很明显。

目前尚不清楚您要在这里做什么,所以不知道最好的解决方案是什么。

【讨论】:

    【解决方案3】:

    你好,你可以试试这个简单的方法:


    int main()
    {
    int i;
    cin>>i;
    cout<< (char)i <<"\n"; 
    
    return 0;
    }
    

    【讨论】:

      【解决方案4】:
      #include <stdio.h>
      #include <string.h>
      
      char* numToColumn(int n, char* outstr){
          char* p = outstr;
          while(n){
              *p++ = 'A' + ((n % 26 == 0)? 26 : n % 26) - 1;
              n = (n - 1) / 26;
          }
          *p = '\0';
          return strrev(outstr);//strrev is win32 not ANSI C
      }
      
      int main(){
          char buff[16];
      
          printf("%s\n", numToColumn( 1,buff));//A
          printf("%s\n", numToColumn( 5,buff));//E
          printf("%s\n", numToColumn(26,buff));//Z
          printf("%s\n", numToColumn(27,buff));//AA
          printf("%s\n", numToColumn(52,buff));//AZ
          printf("%s\n", numToColumn(53,buff));//BA
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-15
        • 2023-04-04
        • 2011-10-05
        • 1970-01-01
        相关资源
        最近更新 更多