Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::byteswap

      From cppreference.com
      <cpp‎ |numeric
       
       
      Utilities library
       
       
      Defined in header<bit>
      template<class T>
      constexpr T byteswap( T n)noexcept;
      (since C++23)

      Reverses the bytes in the given integer valuen.

      std::byteswap participates in overload resolution only ifT satisfiesintegral, i.e.,T is an integer type. The program is ill-formed ifT has padding bits.

      Contents

      [edit]Parameters

      n - integer value

      [edit]Return value

      An integer value of typeT whose object representation comprises the bytes of that ofn in reversed order.

      [edit]Notes

      This function is useful for processing data of different endianness.

      Feature-test macroValueStdFeature
      __cpp_lib_byteswap202110L(C++23)std::byteswap

      [edit]Possible implementation

      template<std::integral T>constexpr T byteswap(T value)noexcept{    static_assert(std::has_unique_object_representations_v<T>,"T may not have padding bits");auto value_representation=std::bit_cast<std::array<std::byte, sizeof(T)>>(value);    std::ranges::reverse(value_representation);returnstd::bit_cast<T>(value_representation);}

      [edit]Example

      Run this code
      #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";constexprauto x=std::uint16_t(0xCAFE);    dump(x);    dump(std::byteswap(x)); std::cout<<"\nbyteswap for U32:\n";constexprauto y=std::uint32_t(0xDEADBEEFu);    dump(y);    dump(std::byteswap(y)); std::cout<<"\nbyteswap for U64:\n";constexprauto z=std::uint64_t{0x0123456789ABCDEFull};    dump(z);    dump(std::byteswap(z));}

      Possible output:

      byteswap for U16:CAFE : FE CAFECA : CA FE byteswap for U32:DEADBEEF : EF BE AD DEEFBEADDE : DE AD BE EF byteswap for U64:0123456789ABCDEF : EF CD AB 89 67 45 23 01EFCDAB8967452301 : 01 23 45 67 89 AB CD EF

      [edit]See also

      (C++20)
      indicates the endianness of scalar types
      (enum)[edit]
      (C++20)
      computes the result of bitwise left-rotation
      (function template)[edit]
      (C++20)
      computes the result of bitwise right-rotation
      (function template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/numeric/byteswap&oldid=178981"

      [8]ページ先頭

      ©2009-2025 Movatter.jp