1

我有一个运行 C32 编译器的 PIC32 嵌入式微控制器。我正在向 Java 程序发送一个包含 64 位双精度值的 UDP 数据包。在我的测试中,我试图将十进制值 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()需要 a long,如上所述。您正在使用演员截断它,并且在字节顺序转换之后,您将获得显示的结果。

我在一个pastebin中找到了这个;它的宏应该适用于转换您的 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()需要 a long,而不是double.

于 2012-04-06T13:17:19.140 回答