std::as_bytes, std::as_writable_bytes
De cppreference.com
<tbody>
</tbody>
| 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.
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()}.Ejemplo
Ejecuta este código
#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 }
Véase también
(C++17) |
El tipo byte. (enum) |