我有一个C ++ Vector,其中包含来自TCP数据段的uint8_t值。我正在寻找应该在向量的第一个索引处的两个值中的一个。
我有以下if语句来表达我的逻辑。
if ( ui8BufferIn.at(0) != 0xE4 || ui8BufferIn.at(0) != 0xE2){
printf("\nWe have a problem, no parsing will be done, Package Type = %u\n", ui8BufferIn.at(0));
proceed = false;
}
上面的if语句在不应该执行时执行。我得到以下打印输出:
We have a problem, no parsing will be done, Package Type = 226
所以你不必做数学运算,226
在HEX中整数是0xE2
。
我已经有一段时间了,所以它很可能很简单,但任何帮助都会很棒!
答案 0 :(得分:3)
我想你可能想要你的逻辑:
if ( ui8BufferIn.at(0) != 0xE4 && ui8BufferIn.at(0) != 0xE2){
现在你正在说"如果是以下任何一种情况:(它不是0xE4
)或者是:(它不是0xE2
),我们遇到了问题" - 如果我理解正确的话,那不是你想说的。根据您的陈述,您可能会收到0xE2
,但由于您未获得0xE4
(ui8BufferIn.at(0) != 0xE4
),您的陈述将会执行。
答案 1 :(得分:3)
你有这样的逻辑:
If (value is not (value a)) OR (value is not (value b)) then...
允许'看看可能性:
Value = a: then value is not b: result is true
Value = b: then value is not a: result is true
Value = other: the value is not a: result is true
所以if语句总是计算为true
答案 2 :(得分:2)
您的代码中存在一个小的逻辑错误。在这种情况下,您的错误将始终显示。假设uint8_t
值为0xE2
。您将获得以下条件:
if(0xE2 != 0xE4 || 0xE2 != 0xE2)
//Error
将评估为:
if(true || false) //Actually the second operand will not be evaluated
//Error
哪个会执行您的错误情况。实际上,对于任何给定的输入,您的错误函数将执行。除非您的uint8_t
值设法与0xE2
和0xE4
进行比较,但就我所知,此类值目前不存在。
最简单的解决方案是改变你的“或”。进入'和',提供以下代码:
if(ui8BufferIn.at(0) != 0xE4 && ui8BufferIn.at(0) != 0xE2)
//Error