如何通过套接字连接从java发送浮点数到c++
How to send float from java to C++ over socket connection?
我想通过套接字从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));
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 使用提升将数据从 PyObject 复制到浮点数 *
- 使用浮点数和双精度数的非常小数字的数学
- 使用英特尔内联函数将打包的 8 位整数乘以浮点数向量
- 如何在 c++ 中将小数点后两位数的浮点数分配给另一个浮点数
- 返回浮点数的小数位数
- txt 文件中浮点数的最大和最小值
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- 将浮点数转换为无符号字符数组并打印出来
- 如何将时间字符串 (M:SS) 转换为浮点数
- 如何将浮点数(*)[6]转换为浮点**类型?
- C++将浮点数乘以分数
- 如何将浮点数转换为uint8_t?
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 如何在C++(Arduino)中将浮点数组转换为字节数组
- 在数学上将浮点数四舍五入到 N 位小数
- Cython通过浮点数的最快方式,用于高频控制回路
- 复制 -nan 表示浮点数,AVX __m256 复制后显示 0