2017-08-19 41 views
-4

私は64ビットの緯度/経度(32ビット緯度、32ビット長)を持っていますが、元のフォーマット(およびタイプ)はわかりませんが、Googleマップ上の位置はわかります。私は長い間、以下のよう緯度抽出:緯度/経度変換

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

が、私はGoogleの地図上の緯度、長い見たとき、私は緯度長いの多くの学位エラーを持っています。 どうすればエラーなしで変換できますか? このlong long形式(またはタイプ)を知っている人はいますか?

+0

「2^31」はおそらくあなたが思っていることをしません。何を期待していますか? – user0042

+1

そして、_bitwise XOR_ [算術演算子](http://en.cppreference.com/w/cpp/language/operator_arithmetic)はそれと何が関係していますか? – user0042

+1

ところで、2の累乗で割るには、右シフト '演算子>>'を使うことができます。 –

答えて

1

^は指数演算子ですが、C/C++ではありません。あなたが探しているのはおそらくビットシフト演算子<<>>です。 1 << 31は、 "1位ビットシフト31位左"を意味します。これは2に等しい32乗(これはC/C++ではなくいくつかの言語で2^32と書くかもしれません)を意味します。

正確な答えは、プラットフォームの正確な詳細と入力値、特にビッグエンディアンかリトルエンディアンかに依存します。しかし、これは次のようなものを含んでいます:

/* 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; 
関連する問題