std:: byteswap
      From cppreference.net
     
     
     
        
         C++
        
        
         
          
           
          
          
         
        
       
       
        
         Utilities library
        
        
         
          
           
            
          
          
          
         
        
       
       | 
 | 
 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
        
         Bit manipulation
        
        
         
          
           
            
          
          
          
         
        
       
       | 
                
                 
                  
                   (C++20)
                  
                 
                
                | ||||
| 
                
                 
                  
                   byteswap
                  
                 
                
                
                
                 
                  
                   (C++23)
                  
                 
                
                | ||||
| Integral powers of 2 | ||||
| 
                
                 
                  
                   (C++20)
                  
                 
                
                | ||||
| 
                
                 
                  
                   (C++20)
                  
                 
                
                | ||||
| 
                
                 
                  
                   (C++20)
                  
                 
                
                | ||||
| 
                
                 
                  
                   (C++20)
                  
                 
                
                | ||||
| Rotating | ||||
| 
                
                 
                  
                   (C++20)
                  
                 
                
                | ||||
| 
                
                 
                  
                   (C++20)
                  
                 
                
                | ||||
| Counting | ||||
| 
                
                 
                  
                   (C++20)
                  
                 
                
                | ||||
| 
                
                 
                  
                   (C++20)
                  
                 
                
                | ||||
| 
                
                 
                  
                   (C++20)
                  
                 
                
                | ||||
| 
                
                 
                  
                   (C++20)
                  
                 
                
                | ||||
| 
                
                 
                  
                   (C++20)
                  
                 
                
                | ||||
| Endian | ||||
| 
                
                 
                  
                   (C++20)
                  
                 
                
                | 
| 
           定义于头文件
            
            
             <bit>
            
            | ||
| 
           
            
             template
            
            
             <
            
            
             class
            
            T
            
             >
            
             constexpr T byteswap ( T n ) noexcept ; | (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)
             
            
           
           | 计算按位右旋转的结果 (函数模板) |