交换浮子和双打的"endianness"
swapping "endianness" of floats and doubles
本文关键字:endianness 交换 更新时间:2023-10-16
我想切换浮点数和双精度值的"端序",它工作正常,通过这样做:
float const v{1.f};
swap(reinterpret_cast<::std::uint32_t const&>(v));
有没有更好的方法来做交换,而不需要强制转换?
编辑:swap()
是gcc内置函数的c++包装器,我在这里没有包括它。
uint16_t __builtin_bswap16 (uint16_t x)
uint32_t __builtin_bswap32 (uint32_t x)
uint64_t __builtin_bswap64 (uint64_t x)
对于某些数据格式,如cor,需要交换端序
虽然尽量避免强制转换是一种良好的做法,但是这种用法正是强制转换存在的原因。端序交换是一种原始数据操作,因此为了做到这一点,您必须剥离键入信息,我想说的是,如果它开始时不是正确的端序,那么它就不是浮点数,并且在错误的端序状态下永远不应该以这种方式键入。
简单地交换字节顺序就足够了。将浮点数内存化为char val[4],创建一个虚拟char rvrse[4],然后设置;Rvrse [3] = val[0];Rvrse [2] = val[1];…然后内存反转回原来的浮动。最好的方法是编写一个类似于ntohl的函数,但使用模板使其适用于所有类型。
相关文章:
- C++嵌套if语句,基本货币交换
- shell排序中的交换和比较
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 通过交换元素使数组相同
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- 交换运算符 + 重载会导致无限递归
- 为什么 std::reduce 需要交换性?
- 复制和交换习惯用法与移动操作之间的交互
- C++ - 没有自定义交换功能的移动分配运算符?
- 如何在数组中交换最小和最大的位置?
- 尽管一切看起来都很好,但值不会交换
- C++交换来自同一类成员的参数值,处理多个类
- 插入排序的最小交换
- C++在 2 个向量向量之间交换向量
- 转置矩阵:交换元素不会更改值
- 不正确的比较和交换计数器输出用于快速排序功能
- 交换函数不是在 C++ 中交换 2D 数组的元素
- std::vector move 而不是交换到空 vector 并释放存储
- 否,除了交换和移动具有互斥锁的类
- 交换浮子和双打的"endianness"