Namespaces
Variants
Actions

std::as_bytes, std::as_writable_bytes

From cppreference.com
< cpp‎ | container‎ | span
 
 
 
 
Defined in header <span>
template<class T, std::size_t N >

std::span<conststd::byte, S/* see below */>

    as_bytes(std::span<T, N> s )noexcept;
(1) (since C++20)
template<class T, std::size_t N >

std::span<std::byte, S/* see below */>

    as_writable_bytes(std::span<T, N> s )noexcept;
(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

#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)[edit]
(C++17)
the byte type
(enum)[edit]
close