2

今、私はこのコードを持っています:

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);
4

1 に答える 1