如何通过套接字连接从java发送浮点数到c++

How to send float from java to C++ over socket connection?

本文关键字:浮点数 c++ java 何通过 套接字 连接      更新时间:2023-10-16

我想通过套接字从java发送浮点值到c++,没有任何第三方库和字节顺序安全。

在c++端,我处理字节顺序(使用beej指南中的htonf)。但是我如何在java中处理字节顺序呢?对于int, java套接字似乎可以很好地处理字节顺序,但float不能传输正确的值。还是转换为字符串是安全发送浮点数的唯一方法?

java:

DataOutputStream out;
out.writeFloat(val);

来自beej指南的c++转换方法:

float ntohf(uint32_t p)
{
    float f = ((p>>16)&0x7fff); // whole part
    f += (p&0xffff) / 65536.0f; // fraction
    if (((p>>31)&0x1) == 0x1) { f = -f; } // sign bit set
    return f;
}

ntohf函数将p解释为固定不动点数。整部分15位,分数16位,符号1位。这不是Java使用的格式。

大多数现代机器都有兼容的浮点表示。直接传递比特是非常安全的。例如:

float f = reinterpret_cast<float&>(ntohl(n));