检查数组中的char是否是某个字符

时间:2011-10-18 21:52:46

标签: c

我正在生成一个随机数并检查所包含的字符是否是某个字符(即0xDB)。这似乎不是正确的方法,因为看起来我的if()总是假的并且转到其他地方。

我怎样才能做到这一点?代码如下。谢谢!

if(buffer[randomNumber] == 0xDB) 
    count++;
else {
    buffer[randomNumber] = 0xDB;
    arrayChangeFlag++;
    count++;
}

2 个答案:

答案 0 :(得分:4)

buffer的类型是什么?

我猜它是signed char或隐式签名的char。在大多数实现中,signed char的范围是(-128,+ 127)。 0xDB超出了该范围,因此相等测试可能永远不会成立。

尝试将缓冲区类型更改为unsigned char,或用以下代码替换您的测试:

 if((unsigned char)buffer[randomNumber] == 0xDB) 

 if(buffer[randomNumber] == (char)0xDB) 

答案 1 :(得分:0)

如果这是我的代码,我可能会像这样重写它:

count++;
if(buffer[randomNumber] != 0xDB) {
    buffer[randomNumber] = 0xDB;
    arrayChangeFlag++;
}

这样可以更轻松地看到count无论如何都会增加,并且更清楚地表明buffer[randomNumber]在退出此区块时将设置为0xDB

它不会修复你的底层错误;如果您使用普通char,您的环境可能使用signed char(标准允许),而整数 0xDB将会是正值,而字节 signed char所代表的0xDB值将为负数。请尝试更改为unsigned char buffer[]