java - 如何通过套接字连接将 float 从java发送到C++?

标签 java c++ sockets endianness

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

在 C++ 方面,我处理字节顺序(使用 beej 指南中的 htonf)。但是我该如何处理java中的字节顺序呢?对于 int,字节顺序似乎由 java 套接字处理得很好,但 float 不能传输正确的值。或者转换为字符串是安全发送 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));

关于java - 如何通过套接字连接将 float 从java发送到C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24788067/

相关文章:

java - antlib 描述符中 ant <taskdef>/<typedef> 中的 onerror 参数

java - 如何在 Java 中造成内存泄漏?

python - xtensor 和 xsimd : improve performance on reduction

ios - iPad 之间的安全通信

sockets - ovs-ofctl 不工作 - 连接被拒绝

java - 属性文件中的正则表达式为 False

java - 将逗号分隔的键=值对转换为 Java 对象

c++ - 静态不可达调用会导致 undefined reference 错误吗?

c++ - 您使用什么模式来分离 C++ 中的接口(interface)和实现?

javascript - 服务器本身捕获的套接字 io 发出