今、私はこのコードを持っています:
uint64_t buffer = 0;
const uint8_t * data = reinterpret_cast<uint8_t*>(&buffer);
これは機能しますが、ぶら下がっているポインターのために危険に思えます (見た目も醜いです)。裸のポインタが周りに座ってほしくありません。私はこのようなことをしたい:
uint64_t buffer = 0;
const std::array<uint8_t, 8> data = partition_me_softly(buffer);
これを安全なコンテナに入れることを可能にするC++ 11スタイルの構造はありstd::array
ますunsigned int
か?
そうでない場合、このコードをより安全にするための理想的な方法は何ですか?
だから私はdauphicの答えをもう少し一般的になるように修正しました:
template <typename T, typename U>
std::array<T, sizeof(U) / sizeof(T)> ScalarToByteArray(const U v)
{
static_assert(std::is_integral<T>::value && std::is_integral<U>::value,
"Template parameter must be a scalar type");
std::array<T, sizeof(U) / sizeof(T)> ret;
std::copy((T*)&v, ((T*)&v) + sizeof(U), ret.begin());
return ret;
}
このようにして、次のようなより多くのタイプで使用できます。
uint64_t buffer = 0;
ScalarToByteArray<uint8_t>(buffer);