2012-12-10 4 views
0

나는 블랙 베리 애플 리케이션에서 일하고있다. 이 앱은 이미 "Basic4Android"프로그램에서 Android로 개발되었습니다. 안드로이드 애플 리케이션을위한 코드는 vb.net로 작성되었습니다. 나는 BlackBerry와 똑같은 코드를 작성해야한다. 나는이 방법을 이해하려고 노력하고 있지만 vb.net 전문가가 아니기 때문에 나는 할 수 없다.vb.net 안드로이드 애플 리케이션 코드

Sub HEX_T24_SHORT_GPS(latitude_decimal_degrees As Double, longitude_decimal_degrees As Double, speed_knots As Int, heading_degrees As Int, time_seconds_since_midnight_gmt As Int, alert_on As Boolean, alert_ack As Boolean, external_interface_control As Boolean, send_extended As Boolean) As String 
    Dim pBuffer(11) As Int 
    pBuffer(0)=0 ' T24 MSGID 0 
    Log("pBuffer(2)" & pBuffer(2)) 
    Dim t1 As Double 
    'Get latitude sign 
    Dim lat_south As Boolean 
    lat_south=True 
    If latitude_decimal_degrees<0 Then lat_south=False 
    'Get Longitude sign 
    Dim lon_west As Boolean 
    lon_west=True 
    If longitude_decimal_degrees<0 Then lon_west=False 
    'Get number of second since midnigh extra bit 
    Dim num_of_second_extra_bit As Boolean 
    num_of_second_extra_bit=False 
    If time_seconds_since_midnight_gmt > 0xFFFF Then num_of_second_extra_bit=True 
    'Convert latitude in bytes 1 to 3 
    latitude_decimal_degrees = Abs(latitude_decimal_degrees*60000) 

"time_seconds_since_midnight_gmt> 0xFFFF의 경우"무엇을 의미합니까 : 나는 전체 방법하지만 명확히 할 필요가 일부만 붙여 넣기하지 않습니다? 여기에 무슨 일이 일어나고 있는지 "latitude_decimal_degrees = Abs (latitude_decimal_degrees * 60000)". "Basic4Android"설명서를 확인했지만 Abs API를 찾을 수 없습니다.

If num_of_second_extra_bit=True Then latitude_decimal_degrees=latitude_decimal_degrees + 0x800000 
    pBuffer(1)=Bit.ShiftRight(Bit.And(latitude_decimal_degrees, 0xFF0000),16) 
    pBuffer(2)=Bit.ShiftRight(Bit.And(latitude_decimal_degrees, 0x00FF00),8) 
    pBuffer(3)=Bit.And(latitude_decimal_degrees, 0xFF) 

비트 시프트는 어떻게 적용됩니까? "AND"연산은 int와 hex 값 사이에서 사용됩니까? pBuffer (1)의 최종 값은 무엇입니까? pBuffer (1)에서 pBuffer (3) 단계의 목적은 무엇입니까? 무엇을하고 있으며 latitude_decimal_degrees의 최종 값은 무엇입니까? 바이트, 바이트 배열 또는 16 진수의 최종 값입니까? 설명하십시오.

답변

2

"time_seconds_since_midnight_gmt> 0xFFFF"는 무엇을 의미합니까?

이것은 time_seconds_since_midnight_gmt가 65,535보다 큰지 확인하는 것입니다. 이는 일종의 보상 일 것입니다. 하루에 86,400 초가 있다는 것을 기억하십시오. 이 무슨 일이 일어나고 있는지를 기반으로 꽤 많은 상황입니다 - - 그것의 위도의 소수 부분이 60,000을 곱한되고

여기 무슨 일 "latitude_decimal_degrees을 = 애비 (60000 *이 latitude_decimal_degrees)" 아마 당신이 들어가는 속도와 관련이 있습니다.이 함수가 어디에서 호출되었는지를 조사하고이 변수에 들어가는 숫자 범위가 무엇인지 파악한 다음 그 변수에서 추론하려고 시도해야합니다.

비트 시프트는 어떻게 적용됩니까?

우선 0x800000은

는 INT 및 16 진수 값 사이에 사용 된 "AND"조작 (이 높은 비트 수 (23)를 설정한다)을 첨가?

예. 정수 값은 2 진법 (2 진법), 8 진법 (8 진법), 10 진법 (16 진법), 16 진법 (16 진법)을 반복 할 수 있습니다. 여전히 동일한 값입니다.

의 pbuffer (1)의 최종 값은 무엇인가? 설명 해주십시오.

latitude_decimal_degrees = 0xE653 (58963)

다음 다음 = 0x80E653

을 0x800000

위도를 추가하고 0xFF0000입니다

: -

좋아의이 예제를 실행하자 위도 = 0x800000

16

위도에 의해 마지막으로 오른쪽 시프트 =이 다른 한편으로는 의미 0x000080

, 당신의 해석 업입니다.

+0

답변 해 주셔서 감사합니다. latitude_decimal_degrees는 16 진수로 변환됩니까? latitude_decimal_degrees = Abs (latitude_decimal_degrees * 60000)입니다. 당신은 paranthesis 내부에서 일어나는 일을 설명했지만 Abs는 무엇을하고 있습니까? 내 질문을 편집하고 있습니다. 위를보고 답장을 보내주십시오. – Sarah

+0

Abs는 절대 값입니다. – tcarvin

+0

latitude_decimal_degrees는 정수입니다. 제가 쓴 것처럼, 다른 방식으로 쓰여질 수 있습니다. 다시 작은 예를 들어 보겠습니다. 0b1010 = 0xA = 10 = 0o12 모든 숫자는 동일합니다. 변화하는 기본 숫자입니다. –

관련 문제