c++ - 交换 float 和 double 的 "endianness"

标签 c++ floating-point

我想切换浮点值和 double 值的“字节序”,它可以正常工作,方法如下:

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)

某些数据格式需要交换字节顺序,例如 CBOR。

最佳答案

虽然尝试避免强制转换是一种很好的做法,但正是这样的使用才是强制转换存在的原因。字节序交换是一种原始数据操作,因此为了做到这一点,您必须去掉键入信息,我想说,如果它一开始的字节序不正确,那么它就不是 float ,并且永远不应该以这种方式键入处于错误的字节序状态。

关于c++ - 交换 float 和 double 的 "endianness",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42558917/

相关文章:

c++ - 具有同一属性可以不同类型的属性的对象

c - 如何将 float 四舍五入到小数点后的特定位数?

c++ - 是否有 IEEE-754 操作的开源 c/c++ 实现?

debugging - 在 arm7 上启用浮点异常时 fpscr 寄存器未更新,未生成 SIGFPE

javascript - 8.00000000000000100000.toFixed(20) 如何等于 8.00000000000000177636?

c++ - float数据类型在内存中是如何存储的?

指向 vector 元素的 C++ 指针,元素已删除

c++ - 多态转换迭代器

c++ - 如何为 Roland UM 4 实现 MIDI 驱动程序?

c++ - 无法编辑 TADOTable 中的数据