Код 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
Что это означает, с другой стороны, зависит от вашей интерпретации.