C# 以C表示的BCD的纬度/经度坐标#

C# 以C表示的BCD的纬度/经度坐标#,c#,coordinates,bcd,C#,Coordinates,Bcd,我正在编写C#代码,对GPS跟踪器(Sinowell G102)上的地理围栏进行编程。土工围栏是长方形的。我基本上需要取左上角坐标和右下角坐标,并将其编程到跟踪器中。现在,跟踪器希望这些坐标是BCD格式(二进制编码的十进制)。每个坐标的长度为4字节。现在,我想出了如何将正纬度或经度坐标转换为BCD-根据跟踪器的协议手册,坐标如下: 22°33.995′(即北纬22度,东经33.995分钟) 变成四个字节02233995 这很直截了当。然而,我的问题是,我不知道如何处理南半球的负坐标(例如-25°

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

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

变成四个字节02233995

这很直截了当。然而,我的问题是,我不知道如何处理南半球的负坐标(例如-25°33.995′,正如我们在南非所做的那样)

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

不幸的是,我不完全理解这段代码。我将非常感谢任何帮助。。。。多谢各位

if (val&0x80000000)
如果设置了高位,则此if语句将为真。二进制中的0x8000000是一个1,后跟全零

val&0x7FFFFFFF
此语句将高位设置为零

0-(val&0x7FFFFFFF)
这将在将高位设置为零后对该值求反

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

if (raw < 0) {
    binary = binary | 0x80000000;
}
if(原始<0){
二进制=二进制| 0x8000000;
}

&和是位运算。对参数中的每个位应用和/或逻辑。所以0x1&0x0=0、0x1&0x1=1、0x0 | 0x0=0x0和0x0 | 0x1=0x1。

我本不希望有更好的答案。谢谢你,尼克。今晚我要试试。