1

C32コンパイラを実行しているPIC32組み込みマイクロコントローラがあります。64ビットのdouble値を含むUDPパケットをJavaプログラムに送信しています。私のテストでは、10進値40.5をJavaに送信しようとしています。

私は受け取ることを期待します:0x4044400000000000

System.out.println(Double.longBitsToDouble(0x4044400000000000L));以降

プリント:40.5

変換せずにUDPパケットを送信すると、次のように受信します:0x00002242352D3330

この値をJavaに取り込む方法はありますか?ダブルのC32表現の頭や尾を作ることはできません。

4

2 に答える 2

2

PIC32はリトルエンディアンです。Adoubleは64ビットで表され、alongは32ビットです。64ビットの場合、が必要ですlong long

htonl()long上記のように、を取ります。キャストで切り捨て、エンディアン変換後、表示された結果が得られます。

私はこれをペーストビンで見つけました; 64ビットを変換するために機能するマクロですlong long

#define htonll(x) \
((((x) & 0xff00000000000000LL) >> 56) | \
(((x) & 0x00ff000000000000LL) >> 40) | \
(((x) & 0x0000ff0000000000LL) >> 24) | \
(((x) & 0x000000ff00000000LL) >> 8) | \
(((x) & 0x00000000ff000000LL) << 8) | \
(((x) & 0x0000000000ff0000LL) << 24) | \
(((x) & 0x000000000000ff00LL) << 40) | \
于 2012-04-06T14:00:58.300 に答える
1

htonl()longではなく、を取りますdouble

于 2012-04-06T13:17:19.140 に答える