2016-06-15 5 views
1

TCP 데이터 세그먼트의 uint8_t 값으로 가득 찬 C++ 벡터가 있습니다. 나는 특별히 벡터의 첫 번째 인덱스에 있어야하는 두 개의 값 중 하나를 찾고있다.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 

그래서 당신은 정수 HEX에서 0xE2 같이 수학, 226 할 필요가 없습니다 : 나는 다음과 같은 출력을 얻을.

나는 잠시 동안 머물 렀으므로 매우 간단 할 수도 있지만 도움이 될 것입니다!

+3

||보다 오히려 && 싶다고 생각합니다. 그대로, 귀하의 조건은 항상 사실을 평가합니다. – nephtes

답변

3

나는 당신이 당신의 논리가 될 수도 있습니다 생각 :

로 지금 당신이 "말을하는지
if (ui8BufferIn.at(0) != 0xE4 && ui8BufferIn.at(0) != 0xE2){ 

만약 하나의 경우 : (이 0xE4 아니다) 또는의 경우 : (이 0xE2을 아니다), 우리 문제가 있습니다. "- 내가 올바르게 이해하면, 당신이하고 싶은 말이 아닌 것입니다. 귀하의 진술을 사용하면 0xE2을 얻을 수 있지만 0xE4 (ui8BufferIn.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 ... 동시에 두 조건이 거짓 일 수는 없으므로 문장이 항상 참이라고 말하는 것이 중요하다고 느낍니다. –