std::byteswap
来自cppreference.com
定义于头文件 <bit>
|
||
template< class T > constexpr T byteswap( T n ) noexcept; |
(C++23 起) | |
逆转给定整数值 n
中的字节。
std::byteswap
仅若 T
满足 integral
,即 T
为整数类型才参与重载决议。若 T
拥有填充位则程序非良构。
参数
n | - | 整数值 |
返回值
T
类型整数值,其对象表示由 n
的对象表示的字节按逆序组成。
注解
此函数对处理有不同端序的数据有用。
示例
运行此代码
#include <bit> #include <cstdint> #include <concepts> #include <iostream> #include <iomanip> template <std::integral T> void dump(T v, char term = '\n') { std::cout << std::hex << std::uppercase << std::setfill('0') << std::setw(sizeof(T) * 2) << v << " : "; for (std::size_t i{}; i != sizeof(T); ++i, v >>= 8) { std::cout << std::setw(2) << static_cast<unsigned>(T(0xFF) & v) << ' '; } std::cout << std::dec << term; } int main() { static_assert(std::byteswap('a') == 'a'); std::cout << "byteswap for U16:\n"; constexpr auto x = std::uint16_t(0xCAFE); dump(x); dump(std::byteswap(x)); std::cout << "\nbyteswap for U32:\n"; constexpr auto y = std::uint32_t(0xDEADBEEFu); dump(y); dump(std::byteswap(y)); std::cout << "\nbyteswap for U64:\n"; constexpr auto z = std::uint64_t{0x0123456789ABCDEFull}; dump(z); dump(std::byteswap(z)); }
可能的输出:
byteswap for U16: CAFE : FE CA FECA : CA FE byteswap for U32: DEADBEEF : EF BE AD DE EFBEADDE : DE AD BE EF byteswap for U64: 0123456789ABCDEF : EF CD AB 89 67 45 23 01 EFCDAB8967452301 : 01 23 45 67 89 AB CD EF
参阅
(C++20) |
指示标量类型的端序 (枚举) |
(C++20) |
计算逐位左旋转的结果 (函数模板) |
(C++20) |
计算逐位右旋转的结果 (函数模板) |