Namespaces
Variants

std::endian

ko.cppreference.net 참조
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20에서 폐기됨)
정수 비교 함수
(C++20)(C++20)(C++20)    
(C++20)
스왑 및 타입 연산
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
공통 어휘 타입
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
비트 조작
(C++20)
(C++23)
2의 정수 거듭제곱2
(C++20)
(C++20)
(C++20)
이동
(C++29)
(C++29)
회전
(C++20)
(C++20)
개수 세기
(C++20)
(C++20)
(C++20)
순열
(C++29)
(C++29)
엔디언
(C++20)
 
헤더 <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)은 모두 동일합니다.
  • 플랫폼이 혼합 엔디언을 사용하면, 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

참고 항목

(C++23)
주어진 정수 값의 바이트 순서를 반전시킴
(함수 템플릿)