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::nativestd::endian::little과 같아요.
  • 모든 스칼라 타입이 빅 엔디언이라면, std::endian::nativestd::endian::big과 같아요.

특수한 플랫폼도 지원돼요.

  • 모든 스칼라 타입의 sizeof가 1이라면, 엔디언은 중요하지 않으며 std::endian::little, std::endian::big, std::endian::native 세 값이 모두 같아요.
  • 플랫폼이 혼합 엔디언(mixed endian)을 사용한다면, std::endian::nativestd::endian::bigstd::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

더 알아보기 (Learn more)

cppreference