我需要使用以下信息计算GPS数据。
Bits size description
Bits 0-25 26 Latitude Location latitude Latitude as 26-bit integer * 100,000
Bits 26-51 26 Longitude Location longitude Longitude as 26-bit integer * 100,000
根据以上信息,我明白了 1)纬度值可以是+ -90.xxxxxx,即它需要7位以容纳90(2 ^ 7)的值。根据信息我如何计算纬度并转换为尾数(7位)和指数(19位)部分。另外,标志位怎么样?例如,值87.45需要以87存储到7位的方式存储,其中19位存储值45.
2)类似的经度值可能是+ -180,需要8位来容纳180(2 ^ 8)的值,基于信息如何计算经度并转换为尾数(8位)和指数(18位)部分。另外,这个符号位怎么样?
例如,值130.50需要以130存储到8位的方式存储,其中18位存储值50.
答案 0 :(得分:1)
我认为你正在看这个错误...你被赋予52位值,包含lat和lon作为整数值,对吧?别担心尾数。您需要将输入的两个部分视为单独的整数,并将每个部分除以100,000以获得度数。
尝试类似:
#include <stdint.h>
int main() {
int64_t input = yourGpsVal();
// note: lat/lon may be the wrong way round
// strip off the rightmost 26 bits and convert to double
double lat = ( input >> 26 ) / 100000.;
// zero the bits left of the rightmost 26 and convert to double
double lon = ( input % ( 1 << 26 )) / 100000.;
}
在Wandbox上查看此演示。 http://melpon.org/wandbox/permlink/xtiDOfMKH0wK5LIC