2016-06-28 9 views
1

GPSトラッカー(Sinowell G102)のジオフェンスをプログラムするためのC#コードを記述しています。ジオフェンスは長方形です。私は基本的に、左上隅の座標と右下隅の座標を取って、それをトラッカーにプログラムする必要があります。現在、トラッカーは、これらの座標をBCD形式(2進符号化10進数)で想定しています。各座標は4バイト長です。今、私は、BCDに座標正緯度又は経度に変換する方法を考え出し - トラッカーのプロトコルのマニュアルに従って、などの座標:C#のBCDへの緯度/経度の座標

22°33.995 '(すなわち、22度ノース、33.995分イースト)

は4バイトになります

これはかなり簡単です。しかし、私の問題は、南半球の負の座標にどのように対処するか分からないことです(南アフリカでは-25°33.995 'など)。

このトラッカーのメーカーは、残念ながらそれは中国の会社であり、その英語はあまり良くありません。しかし彼らは私に次の画像を送った:

enter image description here

残念ながら、私は完全にこのコードを理解していません。私は大いに助けていただければ幸いです...ありがとう。

答えて

2
if (val&0x80000000) 

このif文は、上位ビットが設定されている場合にtrueになります。バイナリ内の0x80000000は、1とそれに続くすべての0です。

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

関連する問題