Latitude/Longitude 在 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 语句将为真。二进制中的 0x80000000 是 1 后跟全零。

val&0x7FFFFFFF

此语句会将高位设置为零。

0-(val&0x7FFFFFFF)

这会在将高位设置为零后取反该值。

因此,相反,您需要使用现有算法将绝对值 (abs(raw)) 转换为二进制。假设原始值在一个名为 raw 的变量中,二进制文件在一个名为 binary 的变量中。如果 raw 为负数,则需要将高位设置为 binary。像这样:

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

& 和 |是按位运算。将 and/or 逻辑应用于参数中的每个位。所以 0x1&0x0 = 0、0x1&0x1 = 1、0x0|0x0 = 0x0 和 0x0|0x1 = 0x1。