2016-06-28 5 views
1

GPS 추적기 (Sinowell G102)에서 지오 펜스를 프로그래밍하는 C# 코드를 작성합니다. 지오 울타리는 직사각형입니다. 기본적으로 왼쪽 위 모서리 좌표 및 오른쪽 하단 모퉁이 좌표를 가져와 트래커에 프로그래밍해야합니다. 이제 추적 프로그램은 이러한 좌표를 BCD 형식 (Binary-Coded Decimal)으로 나타냅니다. 각 좌표는 4 바이트입니다. 지금, 나는 긍정적 인 위도 또는 경도 BCD로 좌표를 변환하는 방법을 생각 - 좌표 추적기의 프로토콜 설명서에 따라 같은 :C#의 BCD로 위도/경도 좌표

22 ° 33.995 ' (즉, 22도 북쪽, 33.995 분 동부)

꽤 정직하고있는 4 바이트 02 23 39 95

된다. 그러나 문제는 남반구의 부정적 좌표 (예 : 남아프리카 공화국에서와 같이 -25 ° 33.995 ')를 처리하는 방법을 모르겠다는 것입니다.

이 추적기의 제조 업체,하지만 불행히도 그것은 중국 기업이고, 그들의 영어는별로 좋지 않습니다. 그러나 그들은 나에게 다음과 같은 이미지를 보내 않았다

enter image description here

불행하게도, 나는 완전히이 코드를 이해하지 않습니다. 나는 어떤 도움을 주셔서 감사합니다 .... 고마워요.

답변

2
if (val&0x80000000) 

높은 비트가 설정되면이 if 문이 true가됩니다. 이진수 0x80000000은 1과 모두 0입니다.

val&0x7FFFFFFF 

이 문은 상위 비트를 0으로 설정합니다.

0-(val&0x7FFFFFFF) 

이렇게하면 상위 비트를 0으로 설정 한 후 값을 무효화합니다.

따라서 이것을 반대로하면 기존 알고리즘을 사용하여 절대 값 (abs(raw))을 이진으로 변환해야합니다. 원래 값이 raw이라는 변수에 있고 이진 값이 binary이라는 변수에 있다고 가정 해보십시오. raw가 음수이면 binary에 상위 비트를 설정해야합니다. 이와 같이 :

if (raw < 0) { 
    binary = binary | 0x80000000; 
} 

& | 비트 연산입니다. 인수의 각 비트에 적용 및/또는 논리 따라서 0x1 & 0x0 = 0, 0x1 & 0x1 = 1, 0x0 | 0x0 = 0x0 및 0x0 | 0x1 = 0x1.

+0

나는 더 나은 대답을 기대할 수 없었습니다. 고마워, 닉. 나는 그것을 오늘 밤에 시험 할 것이다. – user1900799