【发布时间】:2010-08-11 16:24:19
【问题描述】:
我已接受用户输入的字符。我想将该字符的 ASCII 值打印为输出。在不使用任何预定义函数(如果存在)的情况下如何做到这一点?
【问题讨论】:
我已接受用户输入的字符。我想将该字符的 ASCII 值打印为输出。在不使用任何预定义函数(如果存在)的情况下如何做到这一点?
【问题讨论】:
使用 %d 代替 printf("%c", my_char) 来打印数字 (ASCII) 值。
【讨论】:
char 的数值。 (我很清楚char 可以有符号或无符号。)据我了解,ASCII 值始终是正数。因此,我会接受 %u 作为解决方案。但如果更加挑剔,您将不得不提供从执行字符集到 ASCII 的翻译功能,才能真正获得完全正确的解决方案。
还可以考虑使用printf("%hhu", c); 精确指定转换为无符号字符并打印其十进制值。
所以我实际上已经在我的 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不匹配)。
%u 说明符(即使与 hh 一起使用)需要一个(提升的)unsigned int 参数,否则行为是明确未定义的。 char 可能会提升为 int 而不是 unsigned int(因为它可能已签名也可能未签名),因此需要显式转换为 unsigned char 以确保将其提升为 unsigned int。
这个演示展示了基本思想:
#include <stdio.h>
int main()
{
char a = 0;
scanf("%c",&a);
printf("\nASCII of %c is %i\n", a, a);
return 0;
}
【讨论】:
代码printf("%c = %d\n", n, n); 显示字符及其ASCII。
【讨论】:
这将生成所有 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;
}
【讨论】:
#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。