std::byteswap
cppreference.net에서
| 헤더에 정의됨 <bit>
|
||
template< class T >
constexpr T byteswap( T n ) noexcept;
|
(since 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 << "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) |
비트 오른쪽 회전의 결과를 계산합니다 (함수 템플릿) |
(C++29) |
정수의 비트를 반전합니다 (함수 템플릿) |