2016-06-28 2 views
1

Я пишу код C# для программирования географов на GPS-трекере (Sinowell G102). Гео-ограждения прямоугольные. Я в основном должен взять координату верхнего левого угла и координату нижнего правого угла и запрограммировать ее в трекер. Теперь трекер ожидает этих координат в формате BCD (двоично-кодированное десятичное число). Каждая координата имеет длину 4 байта. Теперь я понял, как преобразовать положительные широты или долготы координат в BCD - в соответствии с инструкцией протокола трекера, координатные, такие как:Координаты широты/долготы в BCD в C#

22 ° 33.995 ' (т.е. 22 градуса северной широты, 33.995 минут восточная долгота)

становится четыре байта

который довольно прямо вперед. Моя проблема, однако, в том, что я не знаю, как решать отрицательные координаты Южного полушария (например, -25 ° 33,995 ', как мы здесь, в Южной Африке)

Мне удалось связаться с производителей этого трекера, но, к сожалению, это китайская фирма, и их английский язык не очень хорош. Они, однако, пришлите мне следующее изображение:

enter image description here

К сожалению, я не совсем понимаю, этот код. Я был бы очень признателен за любую помощь ... Спасибо.

ответ

2
if (val&0x80000000) 

Этот оператор if будет иметь значение true, если установлен бит с высоким значением. 0x80000000 в двоичном формате - это 1, за которым следуют все нули.

val&0x7FFFFFFF 

Этот оператор устанавливает высокий бит в ноль.

0-(val&0x7FFFFFFF) 

Это отрицает значение после установки старшего бита в ноль.

Итак, изменив это значение, вы захотите преобразовать абсолютное значение (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

Смежные вопросы