gpt4 book ai didi

javascript - 经度读数以度为单位,1x10^-7 度 lsb,带符号的 2 的补码

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:25:04 27 4
gpt4 key购买 nike

我正在通过 udp 数据包从 gps 单元接收数据。 Lat/Lng 值以十六进制表示。

示例数据
13BF71A8 = 纬度 (33.1313576)
BA18A506 = 经度 (-117.2790010)

文档解释了经度/纬度读数以度为单位,1x10^-7 度 lsb,带符号的 2 的补码。

对于纬度,我可以使用以下公式进行转换:
13BF71A8 = 331313576 * 0.0000001 = 33.1313576

此代码适用于 Lat 但不适用于 Lng:

function convertLat(h){
var latdec = parseInt(h,16);
var lat = latdec * 0.0000001;
return lat;
}

console.log("LAT: " + convertLat("13BF71A8"));

我在转换经度值时遇到问题。有谁知道如何转换经度?

最佳答案

因为您使用的是有符号数,所以您需要指定十六进制代码应该翻转到底部的点。这将在 7FFFFFFF 及以后发生。现在更新您的代码以检查输入是否大于此数字,如果是,则从输入中减去它。

function convert(h) {
dec = parseInt(h, 16);
return (dec < parseInt('7FFFFFFF', 16)) ?
dec * 0.0000001 :
0 - ((parseInt('FFFFFFFF', 16) - dec) * 0.0000001);
}

您的示例起作用的唯一原因是输出预期为正数。


正如 AlexWien 在评论中提到的:由于解析 7FFFFFFFFFFFFFFF 每次都给出相同的整数,您可以将它们存储为常量.它们的值分别是 21474836474294967295

关于javascript - 经度读数以度为单位,1x10^-7 度 lsb,带符号的 2 的补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19408447/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com