嗨我对那些可以用ascii表表示的字符感兴趣。因此我正在做以下事情:
int t(char c) { return (int) c; }
...
if(!(t(d)>255)) { dostuff(); }
所以我只对ascii表可表示的字符感兴趣,我认为在转换为int后应该小于256,我是对的吗?谢谢!
答案 0 :(得分:5)
通常(并非总是)char是8位,所以所有字符的值通常都小于256.所以你的测试总是会成功。
此外,ASCII最多只能达到127而不是255.之后的字符不是标准ASCII,并且可能因代码页而异。
如果您正在处理国际字符,则应该使用wide characters而不是char。
答案 1 :(得分:5)
使用库:
#include <ctype.h>
...
if (isascii(d)) { dostuff(); }
答案 2 :(得分:1)
两个警告:
C标准不会确定char
是默认signed
还是unsigned
。如果您的编译器将char
视为默认签名,则转换为int
可能会导致负值而不是128到255之间的值(这假设您的char
是8-也有点)。如果你想确定这个范围会按照你期望的方式进行转换,也许最好使用unsigned char
。
技术上,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_MIN
和CHAR_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在那个范围内。无需进行比较。