std::byteswap
De cppreference.com
<tbody>
</tbody>
| 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.
Parámetros
| n | - | Valor entero |
Valor de retorno
Un valor entero de tipo T cuya representación de objeto consta de los bytes de esa n en orden inverso.
Notas
Esta función es útil para procesar datos de distinta endianness (extremidad).
Ejemplo
Ejecuta este código
#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
Véase también
(C++20) |
Indica la endianness (extremidad) de los tipos escalares (enum) |
(C++20) |
Calcula el resultado de la rotación izquierda de bits (plantilla de función) |
(C++20) |
Calcula el resultado de la rotación derecha de bits (plantilla de función) |