Espacios de nombres
Variantes
Acciones

std::as_bytes, std::as_writable_bytes

De cppreference.com
< cpp‎ | container‎ | span
 
 
 
std::span
Funciones miembro
Acceso a elementos
Iteradores
Observadores
Subvistas
Funciones no miembro
as_bytesas_writable_bytes
Constante no miembro
Guías de deducción
 
Definido en el archivo de encabezado <span>
template< class T, std::size_t N>
std::span<const std::byte, S/* véase más abajo */> as_bytes(std::span<T, N> s) noexcept;
(1) (desde C++20)
template< class T, std::size_t N>
std::span<std::byte, S/* véase más abajo */> as_writable_bytes(std::span<T, N> s) noexcept;
(2) (desde C++20)

Obtiene una vista a la representación de objeto de los elementos en el lapso s.

Si N es std::dynamic_extent, el alcance del lapso devuelto S también es std::dynamic_extent; de lo contrario es sizeof(T) * N.

as_writable_bytes solo participa en la resolución de sobrecargas si std::is_const_v<T> es false.

[editar] Valor de retorno

1) Un lapso construido con {reinterpret_cast<const std::byte*>(s.data()), s.size_bytes()}.
2) Un lapso construido con {reinterpret_cast<std::byte*>(s.data()), s.size_bytes()}.

[editar] Ejemplo

#include <cstddef>
#include <iomanip>
#include <iostream>
#include <span>
 
void imprimir(float const x, std::span<const std::byte> const bytes)
{
    std::cout << std::setprecision(6) << std::setw(8) << x << " = { "
              << std::hex << std::uppercase << std::setfill('0');
    for (auto const b : bytes) {
        std::cout << std::setw(2) << std::to_integer<int>(b) << ' ';
    }
    std::cout << std::dec << "}\n";
}
 
int main()
{
    /* mutable */ float datos[1] { 3.141592f };
 
    auto const const_bytes = std::as_bytes(std::span{ datos });
 
    imprimir(datos[0], const_bytes);
 
    auto const bytes_grabables = std::as_writable_bytes(std::span{ datos });
 
    // Cambiar el bit de signo que es el bit más significativo (Estándar IEEE 754 de punto flotante).
    bytes_grabables[3] |= std::byte{ 0b1000'0000 };
 
    imprimir(datos[0], const_bytes);
}

Posible salida:

 3.14159 = { D8 0F 49 40 }
-3.14159 = { D8 0F 49 C0 }

[editar] Véase también

(C++17)
El tipo byte.
(enum) [editar]