交换花车和双打的“endianness”

时间:2016-08-09 20:22:24

标签: c++ floating-point

我想切换浮点数和双精度值的“字节顺序”,它可以正常工作:

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。

1 个答案:

答案 0 :(得分:4)

虽然尝试避免强制转换是一种好习惯,但是这样的用法是强制转换存在的原因。 endian swap是一个原始数据操作,所以为了做到这一点,你必须删除键入信息,我会说,如果它不是一个正确的开头,那么它不是一个浮点数,应该永远不会这样输入而在错误的endianess状态。