我想切换float和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),需要交换字节序。

最佳答案

尝试避免强制转换是一种很好的做法,但正是这种用法才是存在强制转换的原因。字节序交换是原始数据操作,因此要执行此操作,必须除去键入信息,我想说的是,如果开头不是字节序正确,则它不是浮点数,因此永远不应以这种方式键入处于错误的状态状态。

关于c++ - 交换浮点数和 double 的“字节序”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42558917/

10-11 00:14