Espacios de nombres
Variantes
Acciones

std::byteswap

De cppreference.com
< cpp‎ | numeric
 
 
 
Definido en el archivo de encabezado <bit>
template< class T >
constexpr T byteswap( T n ) noexcept;
(desde C++23)

Invierte los bytes en un valor entero dado n.

std::byteswap participa en la resolución de sobrecargas solo si T satisface integral, es decir, T es un tipo entero. El programa está mal formado si T tiene bits de relleno.

Contenido

[editar] Parámetros

n - Valor entero

[editar] Valor de retorno

Un valor entero de tipo T cuya representación de objeto consta de los bytes de esa n en orden inverso.

[editar] Notas

Esta función es útil para procesar datos de distinta endianness (extremidad).

[editar] Ejemplo

#include <bit>
#include <cstdint>
#include <concepts>
#include <iostream>
#include <iomanip>
 
template <std::integral T>
void volcar(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 para U16:\n";
    constexpr auto x = std::uint16_t(0xCAFE);
    volcar(x);
    volcar(std::byteswap(x));
 
    std::cout << "\nbyteswap para U32:\n";
    constexpr auto y = std::uint32_t(0xDEADBEEFu);
    volcar(y);
    volcar(std::byteswap(y));
 
    std::cout << "\nbyteswap para U64:\n";
    constexpr auto z = std::uint64_t{0x0123456789ABCDEFull};
    volcar(z);
    volcar(std::byteswap(z));
}

Posible salida:

byteswap para U16:
CAFE : FE CA
FECA : CA FE
 
byteswap para U32:
DEADBEEF : EF BE AD DE
EFBEADDE : DE AD BE EF
 
byteswap para U64:
0123456789ABCDEF : EF CD AB 89 67 45 23 01
EFCDAB8967452301 : 01 23 45 67 89 AB CD EF

[editar] Véase también

(C++20)
Indica la endianness (extremidad) de los tipos escalares
(enum) [editar]
(C++20)
Calcula el resultado de la rotación izquierda de bits
(plantilla de función) [editar]
(C++20)
Calcula el resultado de la rotación derecha de bits
(plantilla de función) [editar]