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 的对象表示的字节按逆序组成。
[编辑] 注解
此函数对处理有不同端序的数据有用。
功能特性测试宏 | 值 | 标准 | 功能特性 |
---|---|---|---|
__cpp_lib_byteswap |
202110L |
(C++23) | std::byteswap
|
[编辑] 可能的实现
template<std::integral T> constexpr T byteswap(T value) noexcept { static_assert(std::has_unique_object_representations_v<T>, "T 不能有填充位"); auto value_representation = std::bit_cast<std::array<std::byte, sizeof(T)>>(value); std::ranges::reverse(value_representation); return std::bit_cast<T>(value_representation); } |
[编辑] 示例
运行此代码
#include <bit> #include <concepts> #include <cstdint> #include <iomanip> #include <iostream> 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 << "U16 的 byteswap:\n"; constexpr auto x =