2016-06-15 6 views
1

TCPデータセグメントのuint8_t値でいっぱいのC++ベクトルがあります。私はベクトルの最初のインデックスにあるはずの2つの値のうちの1つを具体的に探しています。8ビットの符号なし整数とHEXの失敗の比較

ロジックを表現するために次の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で、数学を行う必要はありません。

私はしばらくここにいましたので、とてもうまくいくかもしれませんが、どんな助けも素晴らしいでしょう!

私はあなたのロジックになりたいかもしれないと思う
+3

||よりむしろ&&が必要だと思う。それはそのままですが、あなたの状態は常に真と評価されます。 – nephtes

答えて

3

:我々は、(それは0xE2ではありません):(それは0xE4ではありません)、またはの場合:今あなたがした場合のいずれか場合は、」言っているとおり

if (ui8BufferIn.at(0) != 0xE4 && ui8BufferIn.at(0) != 0xE2){ 

問題がある " - 私が正しく理解すれば、あなたが何を言いたいのか分からない。あなたの声明では、0xE2が得られるかもしれませんが、0xE4ui8BufferIn.at(0) != 0xE4)が得られていないため、ステートメントが実行されます。

+1

私は愚かだと感じる。これはそれだった、ありがとう! – btald1331

+0

問題はない、私たちは皆その時代を持っている。 :P –

2

コードに小さな論理エラーがあります。この場合、エラーは常に表示されます。 uint8_tの値が0xE2であるとします。

if(0xE2 != 0xE4 || 0xE2 != 0xE2) 
    //Error 

と評価されます:あなたのエラー条件を実行します

if(true || false) //Actually the second operand will not be evaluated 
    //Error 

あなたは以下の条件を取得します。実際には任意の入力に対して、エラー関数が実行されます。 uint8_tの値が0xE20xE4の両方と比較することはできますが、わかっている限り、そのような値は現在存在しません。

if(ui8BufferIn.at(0) != 0xE4 && ui8BufferIn.at(0) != 0xE2) 
    //Error 
3

あなたが持っているロジックのような行く:

If (value is not (value a)) OR (value is not (value b)) then... 

ができます

最も簡単な解決策は、次のコードを与え、あなたの「または」に「と」変更することですだから、if文は常にtrue

012と評価さ

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 

:可能性を見て

+0

Upvoted ...私は、両方の述語が同時にfalseになることはできないので、その文は常に真であると言うことが重要だと感じています。 –

関連する問題