从MIPS C到Java转换的IEEE 754双精度数字

时间:2012-04-06 13:00:59

标签: java c floating-point pic ieee-754

我有一个运行C32编译器的PIC32嵌入式微控制器。我正在向Java程序发送一个包含64位double值的UDP数据包。在我的测试中,我正在尝试将十进制值40.5发送到Java。

我希望收到: 0x4044400000000000

自 的System.out.println(Double.longBitsToDouble(0x4044400000000000L));

打印: 40.5

如果我发送UDP数据包而没有任何转换,我收到: 0x00002242352D3330

我知道如何将这个价值转化为Java吗?我无法做出双重C32表示的正面或反面。

2 个答案:

答案 0 :(得分:2)

PIC32是小端。 double由64位表示,long为32位。对于64位,您需要long long

如上所述,

htonl()需要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) | \

答案 1 :(得分:1)

htonl()需要long,而不是double