我正在生成一个随机数并检查所包含的字符是否是某个字符(即0xDB)。这似乎不是正确的方法,因为看起来我的if()总是假的并且转到其他地方。
我怎样才能做到这一点?代码如下。谢谢!
if(buffer[randomNumber] == 0xDB)
count++;
else {
buffer[randomNumber] = 0xDB;
arrayChangeFlag++;
count++;
}
答案 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[]
。