交换花车和双打的"endianness"

use*_*108 5 c++ floating-point

我想切换float和double值的"endianness",它可以正常工作,例如:

float const v{1.f};

swap(reinterpret_cast<::std::uint32_t const&>(v));
Run Code Online (Sandbox Code Playgroud)

没有强制转换,是否存在更好的交换方式?

编辑:swap()是gcc内置函数的C++包装器,我没有在这里包含它.

uint16_t __builtin_bswap16 (uint16_t x)
uint32_t __builtin_bswap32 (uint32_t x)
uint64_t __builtin_bswap64 (uint64_t x)
Run Code Online (Sandbox Code Playgroud)

对于某些数据格式,例如CBOR,需要交换字节序.

The*_*Kid 3

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