ansi-c将char转换为int,由ascii表示

时间:2010-01-22 17:38:17

标签: c

嗨我对那些可以用ascii表表示的字符感兴趣。因此我正在做以下事情:

       int t(char c) { return (int) c; }
       ...
       if(!(t(d)>255)) { dostuff(); }

所以我只对ascii表可表示的字符感兴趣,我认为在转换为int后应该小于256,我是对的吗?谢谢!

5 个答案:

答案 0 :(得分:5)

通常(并非总是)char是8位,所以所有字符的值通常都小于256.所以你的测试总是会成功。

此外,ASCII最多只能达到127而不是255.之后的字符不是标准ASCII,并且可能因代码页而异。

如果您正在处理国际字符,则应该使用wide characters而不是char。

答案 1 :(得分:5)

使用库:

#include <ctype.h>

...
if (isascii(d)) { dostuff(); }

答案 2 :(得分:1)

两个警告:

  1. C标准不会确定char是默认signed还是unsigned。如果您的编译器将char视为默认签名,则转换为int可能会导致负值而不是128到255之间的值(这假设您的char是8-也有点)。如果你想确定这个范围会按照你期望的方式进行转换,也许最好使用unsigned char

  2. 技术上,ASCII从0到127,以上所有内容都是某种扩展。

答案 3 :(得分:0)

char是C中的完整类型。您可以直接进行检查:

char c;
/* assign to c */
if (c >= 0 && c <= 127) {
    /* in ASCII range */
}

我假设您不想使用isascii()(它不在C标准中,尽管它是POSIX)。

此外,您可以检查CHAR_MAX是否等于127.如果是,则不需要与127进行比较,因为根据定义,c不会超过它。同样,如果CHAR_MIN为0,则您不需要与0进行比较。CHAR_MINCHAR_MAX都在limits.h中定义。

我认为你正在考虑一个溢出char的整数值,因此将其转换为int。但是,由于损坏已经完成,这对溢出没有帮助。

答案 4 :(得分:-1)

char的大小始终为1个字节(根据标准)。对于所有实际问题,这意味着char var不能具有大于255的值。(尽管存在系统,其中一个字节具有多于8位并且因此char值可以更大,但是这些现在很少见)

另外需要注意的是,如果char未定义为有符号或无符号,则它可以在-128到127范围内或0到255范围内。 (假设每字节8比特,当然: - ))

同时,ASCII表是7位,这意味着它涵盖了0到127的范围。因此,如果您只对ASCII符号感兴趣,您可以检查是否有值你的char var在那个范围内。无需进行比较。