Код vb.net для приложения Android

Я работаю над приложением BlackBerry. Это приложение уже было разработано в Android в программе "Basic4Android". Код для приложения для Android написан на vb.net. Мне нужно написать точно такой же код для BlackBerry. Я пытаюсь понять этот метод, но я не могу, так как я не эксперт с 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", но не смог найти API Abs.

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)

Как применяется битовый сдвиг? Используется ли операция "И" между значением типа int и hex? Каково окончательное значение в pBuffer(1)? Какова цель шагов pBuffer (1) - pBuffer(3). Что он делает и каково окончательное значение latitude_decimal_degrees? Является ли окончательное значение в байтах, байтовом массиве или шестнадцатеричном? Пожалуйста, объясните.

1 ответ

Решение

Что означает "если time_seconds_since_midnight_gmt > 0xFFFF"?

Для этого нужно проверить, больше ли время time_seconds_since_midnight_gmt, чем 65 535 - это, вероятно, какая-то компенсация - помните, что за день уходит 86 400 секунд.

Что здесь происходит "latitude_decimal_degrees = Abs(latitude_decimal_degrees*60000)"

Десятичная часть широты умножается на 60 000 - это в значительной степени зависит от контекста, происходящего - возможно, это как-то связано со скоростью, с которой вы двигаетесь - вы должны посмотреть, откуда вызывается эта функция, и попытаться выяснить выясните, что такое диапазон чисел, который входит в эту переменную, а затем попытайтесь вывести ее из этого.

Как применяется битовый сдвиг?

Сначала добавляется 0x800000 (это высокий бит настройки 23)

Используется ли операция "И" между значением типа int и hex?

Да. Кажется, что вы все перепутали - целочисленное значение может быть представлено в base 2 (двоичное число), base 8 (восьмеричное), base 10(обычное значение) и base 16 (шестнадцатеричное) - это все то же значение.

Каково окончательное значение в pBuffer(1)? Пожалуйста, объясни.

Хорошо, давайте рассмотрим пример:

latitude_decimal_degrees = 0xE653 (58 963)

затем добавьте 0x800000

широта = 0x80E653

тогда и с 0xFF0000

широта = 0x800000

и, наконец, сдвиг вправо на 16

широта = 0x000080

Что это означает, с другой стороны, зависит от вашей интерпретации.

Другие вопросы по тегам