2013-03-22 2 views
0

나는 아마 이해할 수없는 간단한 질문을 가지고있다.시리얼 데이터 파싱

직렬 스트림을 보내는 데이터 로거 용 직렬 파서를 만들고 있습니다. 제품에 대한 설명서에서 이해할 수없는 계산이 명시되어 있습니다.

Lateral = Data1 And 0x7F + Data2/0x100 
If (Data1 And 0x80)=0 Then Lateral = -Lateral 

Data1 그리고 0x7f 수단을 무엇? 나는 7F127이라는 것을 알고 있습니다. 게다가 And 문과의 조합을 이해하지 못합니다.

실제 공식은 어떻게 생겼을까요?

+0

이것은 비트 단위이며, 표현식의 해당 부분에 대해 옥텟의 최상위 비트가 * clear *인지 확인하는 것입니다. Data1의 8 비트 슬롯에서 부호 비트를 존중하는 것이 목적이라면, 두 번째 라인의 논리 값이 정확히 나타나지 않습니다. – WhozCraig

답변

1

비트 AND - 해당 비트가 모두 입력으로 설정된 경우에만 출력의 비트가 설정됩니다.

태그가 C로 작업하고 있음을 나타내므로 & 연산자로 비트 AND를 수행 할 수 있습니다.

(0x7F의 이러한 하부 일곱 개 비트를 추출하고, 바이트의 상위 비트를 추출하여 각각 대응와 AND 연산되도록 01111111 및 0x80으로는, 이진수 10000000이다 참고.)

+0

매우 빠른 답변을 해주셔서 감사합니다. 비트 앤드에 관해서 조금 읽었습니다. 데이터가 있거나 이해하는 방법이 있다면 "Data1"에 1 (true)로 서명 했습니까? 고마워요! – MadsChristiansen

0

첫번째 문장 Lateral = Data1 And(&) 0x7f + Data2/ 0x100

Data1 (데이터 및에서 0x7f)의 크기를 가지고 그것에 추가 Data2/256

번째 문장 체크 부호 OD Data1의 값을하고 0,123,994 동일한를 지정 의미.

+0

완벽한 아픔을주는 아, 너 정말 고마워. !!! – MadsChristiansen