将浮点数划分为单个字节
Divide a float into single bytes
我正在使用RakNet进行联网,我需要传输浮点值。问题是,我只能发送单个字节。由于浮点数由 4 个字节组成,我认为一定有可能将浮点数分解成这四个字节并发送它们。之后,我想再次将它们组合成一个漂浮物。
我该怎么做?
-
将原始
float
值memcpy
为适当大小的unsigned char
数组float f = ...; unsigned char c[sizeof f]; memcpy(c, &f, sizeof f); // use `c[i]` to access the bytes
-
使用
reinterpret_cast
将原始指针重新解释为unsigned char
数组float f = ...; unsigned char *c = reinterpret_cast<unsigned char *>(&f); // use `c[i]` to access the bytes
-
使用联合执行相同的重新解释
union FC { float f; unsigned char c[sizeof FC::f]; }; float f = ...; FC u = { f }; // use `u.c[i]` to access the bytes
请记住一些额外的细节:最后一种方法(带union
)现在在 C 中是合法的,但在C++中仍然是正式非法的 - 您不允许在C++中阅读工会的"不活跃"成员。观察小端和大端平台上的字节顺序。如果使用第二种方法,还要将收件人float
重新解释为 unsigned char
数组,而不是相反,以避免对齐问题。
相关文章:
- 是否值得使用位移在单个字节中存储多个小数据成员?
- 为什么数组(字符串类型)的大小是 24 字节,带有单个空格元素
- 使用位操作将8字节数字中的每个字节中的一位转换为单个字节
- 现代x86硬件可以不将单个字节存储到内存中吗
- Visual Studio 多字节字符到单个字节
- 将浮点数划分为单个字节
- 使用无符号字符数组处理单个字节
- 表示单个字节中的浮点数
- 将单个字符转换为字节C++
- C++ 使用单个输入字节文件的不同部分实例化堆栈上的成员类
- 如何在C++中从字节数组(在 BIG-ENDIAN 中)中提取单个字段
- 将单个字节从 Enum 附加到 NSMutableData
- 在 ARM 上快速搜索/替换 8 位数组中匹配的单个字节
- 如何用C++将单个字节写入文件
- 删除内存字段(数组)中的单个字节
- 读/写void*变量的单个字节
- 如何将cv::mat标头和数据部分转换为单个字节数组
- 我试图访问浮点数中的单个字节,我得到了意想不到的结果
- 从java中的多字节变量中获取单个字节
- 如何访问整数的单个字节