如何比较c语言中的字符



我有一个小项目,我正在做,需要比较一个流的第一个字节。问题是该字节可以是0xe5或任何其他不可打印的字符,从而表示该特定数据是坏的(一次读取32位)。我允许的有效字符是A-Z, A-Z, 0-9, '。和空间。

当前代码为:

FILE* fileDescriptor; //assume this is already open and coming as an input to this function.
char entry[33];
if( fread(entry, sizeof(unsigned char), 32, fileDescriptor) != 32 )
{
    return -1; //error occured
}
entry[32] = '';  //set the array to be a "true" cstring.
int firstByte = (int)entry[0];
if( firstByte == 0 ){
    return -1;    //the entire 32 bit chunk is empty.
}
if( (firstByte & 0xe5) == 229 ){       //denotes deleted.
    return -1;    //denotes deleted.
}

所以问题是,当我试图做以下事情时:

if( firstByte >= 0 && firstByte <= 31 ){ //NULL to space in decimal ascii
    return -1;
}
if( firstByte >= 33 && firstByte <= 45 ){ // ! to - in decimal ascii
    return -1;
}
if( firstByte >= 58 && firstByte <= 64 ) { // : to @ in decimal ascii
    return -1;
}
if( firstByte >= 91 && firstByte <= 96 ) { // [ to ` in decimal ascii
    return -1;
}
if( firstByte >= 123 ){ // { and above in decimal ascii.
    return -1; 
}

它不起作用。我看到一些字符,比如表示一个黑色的六面菱形,里面有一个问号……理论上它应该只允许以下字符:Space (32), 0-9 (48-57), A-Z (65-90), a-z (97-122),但我不知道为什么它不能正常工作。

我甚至尝试使用ctype.h -> isccontrol, isalnum, ispunct中的函数,但这也不起作用。

有谁能帮助一个c新手与我假设是一个简单的c问题?我将不胜感激!

谢谢。马丁

我不确定为什么要将其转换为int类型。请考虑使用以下方式之一:

if ((entry[0] >= 'A' && entry[0] <= 'Z') ||
    (entry[0] >= 'a' && entry[0] <= 'z') ||
    entry[0] == ' ' || entry[0] == '.')

#include <ctype.h>
if (isalnum(entry[0]) || entry[0] == ' ' || entry[0] == '.')

相关内容

  • 没有找到相关文章

最新更新