1

署名されていないデータ型を扱う場合、、、、および型に対応する汎用コンテナーuint8が必要uint16です。上記のデータ型を使用してキャストすることは役に立ちましたが、代わりにそれらを置き換えて、コードをよりきれいに見せました。uint32uint64void*vector<uint8_t>

void* test = (uint32_t) 100;

同じものをバイト単位でベクトル テストにプッシュします。

これは、より優れたよりクリーンなソリューションになります。

PS:モジュールの制限により、ブーストを使用できません。

4

2 に答える 2

1

を使用しunionて、データを保存およびアクセスできます。これにより、共用体のすべてのメンバーが同じメモリを占有できるようになり、キャストを必要とせずに適切なデータ型にアクセスできます。

union UintData
{
    uint8_t  v8;
    uint16_t v16;
    uint32_t v32;
    uint64_t v64;
};

std::vector<UintData> data;
UintData test;
test.v32 = 0xffffffff;
data.push_back(data);

データにアクセスするときは、現在アクティブなメンバー (最後のメンバー セット) にのみアクセスするようにしてください。そうしないと、動作が未定義になります。

于 2013-08-09T17:19:34.387 に答える
0

ユニオンは解決策かもしれませんが、uint8_t、uint16_t、uint32_t、およびuint64_tをプッシュした後のユニオンのベクトルのサイズはどれくらいですか?

私は簡単な解決策が好きなので、試してみます

std::vector<uint64_t>

この場合、すべての値を挿入できます。

于 2013-08-09T17:38:18.367 に答える