簡體   English   中英

在C#中對BCD的緯度/經度坐標

[英]Latitude/Longitude coordinates to BCD in C#

我正在編寫C#代碼以在GPS跟蹤器(Sinowell G102)上對地理圍欄進行編程。 地理圍欄是矩形的。 我基本上必須獲取左上角坐標和右下角坐標,並將其編程到跟蹤器中。 現在,跟蹤器希望這些坐標為BCD格式(二進制編碼的十進制)。 每個坐標為4個字節長。 現在,我想出了如何將正緯度或經度坐標轉換為BCD-根據跟蹤器的協議手冊,坐標如下:

22°33.995′ (即北22度,東33.995分鍾)

變為四個字節02 23 39 95

這很簡單。 但是,我的問題是,我不知道如何解決南半球的負坐標(例如我們在南非遇到的-25°33.995′)

我設法與該跟蹤器的制造商取得了聯系,但不幸的是這是一家中國公司,他們的英語不是很好。 但是,他們確實向我發送了以下圖片:

在此處輸入圖片說明

不幸的是,我不完全理解此代碼。 我將不勝感激任何幫助....謝謝。

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM