我想通过套接字将浮点值从 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/