types_endian
types_endian (std::endian 엔디언)
이 페이지는 C++20에서 도입된 std::endian 열거형 타입에 대해 설명해요. 이 타입은 시스템에서 사용하는 바이트 순서, 즉 엔디언(endianness)을 나타내는 데 사용돼요. little, big, native 세 가지 값으로 현재 플랫폼의 엔디언을 확인할 수 있어요.
출처: cppreference
본문
<bit> 헤더에 정의된 std::endian은 모든 스칼라 타입의 엔디언을 나타내요. 구체적인 값은 구현에 따라 정의되지만, 다음과 같은 의미를 가져요.
<bit> 헤더에 정의됨 |
||
|---|---|---|
enum class endian { little = /* implementation-defined */ , big = /* implementation-defined */ , native = /* implementation-defined */ , }; |
(C++20부터) |
- 모든 스칼라 타입이 리틀 엔디언이라면,
std::endian::native는std::endian::little과 같아요. - 모든 스칼라 타입이 빅 엔디언이라면,
std::endian::native는std::endian::big과 같아요.
특수한 플랫폼도 지원돼요.
- 모든 스칼라 타입의
sizeof가 1이라면, 엔디언은 중요하지 않으며std::endian::little,std::endian::big,std::endian::native세 값이 모두 같아요. - 플랫폼이 혼합 엔디언(mixed endian)을 사용한다면,
std::endian::native는std::endian::big도std::endian::little도 아니에요.
가능한 구현
enum class endian
{
#if defined(_MSC_VER) && !defined(__clang__)
little = 0,
big = 1,
native = little
#else
little = __ORDER_LITTLE_ENDIAN__,
big = __ORDER_BIG_ENDIAN__,
native = __BYTE_ORDER__
#endif
};
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_endian |
201907L | (C++20) | std::endian |
예제
#include <bit>
#include <iostream>
int main()
{
if constexpr (std::endian::native == std::endian::big)
std::cout << "big-endian\n";
else if constexpr (std::endian::native == std::endian::little)
std::cout << "little-endian\n";
else
std::cout << "mixed-endian\n";
}
가능한 출력:
mixed-endian
같이 보기
byteswap (C++23) |
주어진 정수 값의 바이트 순서를 뒤집어요 (함수 템플릿) [편집] |
|---|---|
C 문서의 endian |