繁体   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