【问题标题】:Displaying ASCII value of a character in c [duplicate]在c中显示字符的ASCII值[重复]
【发布时间】:2010-08-11 16:24:19
【问题描述】:

我已接受用户输入的字符。我想将该字符的 ASCII 值打印为输出。在不使用任何预定义函数(如果存在)的情况下如何做到这一点?

【问题讨论】:

    标签: c ascii


    【解决方案1】:

    使用 %d 代替 printf("%c", my_char) 来打印数字 (ASCII) 值。

    【讨论】:

    • @Karl:有传言说所有声望超过 10k 的人都被绑架并被 AI 取代。除了一直是人工智能的 Jon Skeet。
    • 感谢您的解决方案。我尝试使用这种方法。它没有给我任何错误,但它为输入的任何字符显示值 10。所以我试图找出问题所在。
    • @user417316:我认为您正在从行尾读取换行符...
    • @Mark:问题是关于 ASCII 值而不是关于 char 的数值。 (我很清楚char 可以有符号或无符号。)据我了解,ASCII 值始终是正数。因此,我会接受 %u 作为解决方案。但如果更加挑剔,您将不得不提供从执行字符集到 ASCII 的翻译功能,才能真正获得完全正确的解决方案。
    • @caf:当然,如果您假设字符集实际上 ASCII。 C规范没有强加这一点,所以正如我所说,这里给出的答案是错误的。我只想说明 %u 比 %d 更接近我接受的正确答案。顺便说一句,我自己不知道真正问题的任何快速答案,即输出字符的 ASCII 值,不管执行字符集是什么。
    【解决方案2】:

    还可以考虑使用printf("%hhu", c); 精确指定转换为无符号字符并打印其十进制值。

    更新0

    所以我实际上已经在我的 C 编译器上对此进行了测试,看看发生了什么,结果很有趣:

    char c = '\xff';
    printf("%c\n", c);
    printf("%u\n", c);
    printf("%d\n", c);
    printf("%hhu\n", c);
    

    这是打印出来的:

    � (printed as ASCII)
    4294967295 (sign extended to unsigned int)
    -1 (sign extended to int)
    255 (handled correctly)
    

    感谢caf 指出这些类型可能会以意想不到的方式被提升(它们显然是针对%d%u 的情况)。此外,%hhu 的情况似乎正在转换回char unsigned,可能会修剪符号扩展。

    【讨论】:

    • 你需要将c转换为(unsigned char),否则可能会被提升为int(与%u不匹配)。
    • @caf:我不跟,不是要转换的时候投吗?
    • 这是一个技术问题,但 %u 说明符(即使与 hh 一起使用)需要一个(提升的)unsigned int 参数,否则行为是明确未定义的。 char 可能会提升为 int 而不是 unsigned int(因为它可能已签名也可能未签名),因此需要显式转换为 unsigned char 以确保将其提升为 unsigned int
    【解决方案3】:

    这个演示展示了基本思想:

    #include <stdio.h>
    
    int main()
    {
        char a = 0;
        scanf("%c",&a);
    
        printf("\nASCII of %c is %i\n", a, a); 
    
        return 0;
    }
    

    【讨论】:

    • 谢谢你的代码!
    【解决方案4】:

    代码printf("%c = %d\n", n, n); 显示字符及其ASCII。

    【讨论】:

      【解决方案5】:

      这将生成所有 ASCII 字符的列表并打印它的数值。

      #include <stdio.h>
      #define N 127
      
      int main()
      {
          int n;
          int c;
      
          for (n=32; n<=N; n++) {
              printf("%c = %d\n", n, n);
          }
      
          return 0;
      } 
      

      【讨论】:

        【解决方案6】:
         #include "stdio.h"
         #include "conio.h"
         //this R.M.VIVEK coding for no.of ascii values display and particular are print
        
        void main()
        {
            int rmv,vivek;
            clrscr();
        
            for(rmv=0;rmv<=256;rmv++)
            {
                if(printf("%d = %c",rmv,rmv))
            }
        
            printf("Do you like particular ascii value\n enter the 0 to 256 number");
            scanf("%d",&vivek);
            printf("\nthe rm vivek ascii value is=%d",vivek);
            getch();
        }
        

        【讨论】:

        • conio.h 是不可移植的,不值得在这里使用,main() 返回int,并且尝试从int 打印char 不会有任何好处价值256
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-03
        • 2016-08-09
        • 1970-01-01
        • 1970-01-01
        • 2016-05-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多