C#中的纬度/经度坐标为BCD

时间:2016-06-28 20:35:19

标签: c# coordinates bcd

我正在编写C#代码来编程GPS跟踪器(Sinowell G102)上的地理围栏。地理围栏是矩形的。我基本上必须采用左上角坐标和右下角坐标,并将其编程到跟踪器中。现在,跟踪器期望这些坐标采用BCD格式(二进制编码的十进制)。每个坐标长4个字节。现在,我想出了如何将正经度或经度坐标转换为BCD - 根据跟踪器的协议手册,坐标如下:

22°33.995'(即北纬22度,东经33.995分钟)

变为四个字节 02 23 39 95

这很简单。然而,我的问题是我不知道如何处理南半球的负坐标(例如-25°33.995',就像我们在南非这里一样)

我设法与这个跟踪器的制造商联系,但不幸的是它是一家中国公司,他们的英语不是很好。但他们确实给我发了以下图片:

enter image description here

不幸的是,我并不完全理解这段代码。我非常感谢任何帮助......谢谢。

1 个答案:

答案 0 :(得分: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&amp; 0x0 = 0,0x1&amp; 0x1 = 1,0,00 | 0x0 = 0x0,以及0x0 | 0x1 = 0x1。