纬度/经度转换

时间:2017-08-19 15:51:55

标签: c++ matlab

我有64位作为纬度/长度(32位纬度,32位长),我不知道它原来的格式(和类型),但我知道它在谷歌地图上的位置。我提取lat如下:

lat=uint32*180/2^31
long=uint32*180/2^31

但是当我在google地图上看到lat long时,我在lat long中有很多度数误差。 我怎么能没有错误地转换它? 有没有人知道这种长格式(或类型)?

1 个答案:

答案 0 :(得分:1)

在其他语言中,^是指数运算符,但不是C / C ++。您正在寻找的可能是位移运算符<<>>1 << 31表示“数字1位移31位”,等于2提升到32次幂(在某些语言中你可能写成2 ^ 32 - 而不是C / C ++)。

确切的答案取决于平台的确切细节和输入值 - 特别是每个都是大端还是小端。但它会涉及到这样的事情:

  /* A 64-bit input value encoding two 32-bit components */
  unsigned long int foo = 64424509440 + 19;
  /* Extracting two 32-bit components */
  cout << foo << " " << ( foo >> 32 ) << " " << ( foo & ( (1 << 31) - 1 ) ) << endl;