32ビット表現(及び逆の手順)に二重変換

エリック・ペラン:

[コンテキスト]
私は現在、プローブのバルーンに取り組んでいます。私の通信は、私はいくつかの情報を送信するために持っている中で12バイトのメッセージに制限されています。(標高、最高温度、経度、緯度、平均加速度)。
プローブは、ラズベリーパイ2 Bに基づいています。

[質問]
私は現在、私のデータグラムを構築し、32ビットのダブル(非可逆)としての私の緯度と経度を保存したいのです。ストレージは、この種の変換を行うためのツールがあります浮動小数点で行うか、ポイントを固定することができますか?他にどのように私はそれを行うことができますか?(丸いパーティの特定に)
私は当初、Javaで動作するように計画されたが、私は、Pythonに移行することができます。

前もって感謝します

AJNeufeld:

翻訳したい場合はdouble、64ビットには、使用することができますlong Double.doubleToLongBits(double value)し、double Double.longBitsToDouble(long bits)それをバックに変換します。

あなたは32ビット値を変換したい場合はFloat値や背中、対応する機能があるfloatToIntBits(...)intBitsToFloat(...)

以下のためにdouble32ビットに、私はへの変換、2段階の変換を使用したいfloat最初の:

double val = ...;
int bits = Float.floatToIntBits( (float) val );

帰ってきた:

int bits = ...;
double val = (double) Float.intBitsToFloat(bits);

パッキンとバッファに直接開梱:

ByteArrayOutputStream baos = new ByteArrayOutputStream(20);
DataOutputStream dos = new DataOutputStream( ... );
dos.writeFloat( altitude );
dos.writeFloat( max_temperature );
dos.writeFloat( longitude );
dos.writeFloat( latitude );
dos.writeFloat( average_acceleration);
byte[] data = baos.toByteArray();

あなたは32ビットとしたいどの値が把握する必要があります、そしてあなたは小さなスペースに詰め込むことができたので、もちろん、これは、20バイトのバッファ(5×32ビットの浮動小数点数)ではなく、12バイトのバッファを作成します。

開梱、使用DataInputStreamしてreadFloat()

ByteArrayInputStream bais = ...
DataInputStream dis = new DataInputStream(bais);
altitude = dis.readFloat();
max_temperature = dis.readFloat();
...etc...

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=208658&siteId=1
おすすめ