std::as_bytes, std::as_writable_bytes
From cppreference.com
Defined in header <span> | ||
template<class T, std::size_t N > std::span<conststd::byte, S/* see below */> | (1) | (since C++20) |
template<class T, std::size_t N > std::span<std::byte, S/* see below */> | (2) | (since C++20) |
Obtains a view to the object representation of the elements of the span s.
If N
is std::dynamic_extent, the extent of the returned span S
is also std::dynamic_extent; otherwise it is sizeof(T)* N.
as_writable_bytes
only participates in overload resolution if std::is_const_v<T> is false.
[edit]Return value
1) A span constructed with {reinterpret_cast<conststd::byte*>(s.data()), s.size_bytes()}.
2) A span constructed with {reinterpret_cast<std::byte*>(s.data()), s.size_bytes()}.
[edit]Example
Run this code
#include <cstddef>#include <iomanip>#include <iostream>#include <span> void print(floatconst x, std::span<conststd::byte>const bytes){std::cout<<std::setprecision(6)<<std::setw(8)<< x <<" = { "<<std::hex<<std::uppercase<<std::setfill('0');for(autoconst b : bytes)std::cout<<std::setw(2)<<std::to_integer<int>(b)<<' ';std::cout<<std::dec<<"}\n";} int main(){/* mutable */float data[1]{3.141592f}; autoconst const_bytes = std::as_bytes(std::span{data}); print(data[0], const_bytes); autoconst writable_bytes = std::as_writable_bytes(std::span{data}); // Change the sign bit that is the MSB (IEEE 754 Floating-Point Standard). writable_bytes[3]|=std::byte{0B1000'0000}; print(data[0], const_bytes); }
Possible output:
3.14159 = { D8 0F 49 40 } -3.14159 = { D8 0F 49 C0 }
[edit]See also
implicitly creates objects in given storage with the object representation reused (function template) | |
(C++17) | the byte type (enum) |