2016-06-28 7 views
1

Ich schreibe C# -Code, um Geo-Fences auf einem GPS-Tracker zu programmieren (Sinowell G102). Die Geo-Zäune sind rechteckig. Ich muss im Grunde die Koordinate der oberen linken Ecke und die Koordinate der unteren rechten Ecke nehmen und sie in den Tracker programmieren. Nun erwartet der Tracker diese Koordinaten im BCD-Format (Binary-Coded Decimal). Jede Koordinate ist 4 Byte lang. Nun, dachte ich, wie eine positive Breite oder Länge konvertieren Koordinate in BCD - gemäß dem Protokoll Handbuch des Verfolgers, eine Koordinate wie:Breiten-/Längenkoordinaten zu BCD in C#

22 ° 33,995 ' (dh 22 Grad nördliche Breite 33,995 Minuten Ost)

wird die vier Bytes

Das ist ziemlich einfach. Mein Problem ist jedoch, dass ich nicht weiß, wie man die negativen Koordinaten der südlichen Hemisphäre (wie -25 ° 33.995 ', wie wir hier in Südafrika) angehen.

Ich schaffte es, in Kontakt zu treten die Hersteller dieses Trackers, aber leider ist es eine chinesische Firma, und ihr Englisch ist nicht sehr gut. Sie haben senden Sie mir aber folgendes Bild:

enter image description here

Leider verstehe ich nicht vollständig diesen Code. Ich würde jede Hilfe sehr schätzen .... Danke.

Antwort

2
if (val&0x80000000) 

Diese if-Anweisung wird wahr, wenn das High-Bit gesetzt ist. 0x80000000 in binär ist eine 1 gefolgt von allen Nullen.

val&0x7FFFFFFF 

Diese Anweisung setzt das High-Bit auf Null.

Dies negiert den Wert, nachdem das High-Bit auf Null gesetzt wurde.

Um dies umzukehren, müssen Sie den absoluten Wert (abs(raw)) mit Ihrem vorhandenen Algorithmus in binär konvertieren. Nehmen wir an, der ursprüngliche Wert befindet sich in einer Variablen mit der Bezeichnung raw, und die Binärdatei befindet sich in einer Variablen namens binary. Wenn roh negativ ist, müssen Sie das hohe Bit auf binary setzen. Wie folgt aus:

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

& und | sind bitweise Operationen. Die Anwendung und/oder Logik auf jedes der Bits in den Argumenten. Also 0x1 & 0x0 = 0, 0x1 & 0x1 = 1, 0x0 | 0x0 = 0x0 und 0x0 | 0x1 = 0x1.

+0

Ich hätte keine bessere Antwort erhoffen können. Danke Nick. Ich werde es heute Abend ausprobieren. – user1900799