1

在处理无符号数据类型时,我需要有一个可以容纳uint8uint16和类型uint32的通用容器。uint64拥有void*并强制转换上述数据类型对我有帮助,但仍将它们替换为vector<uint8_t>使代码看起来更干净。

void* test = (uint32_t) 100;

对比

将相同的东西按字节推入向量测试;

这将是一个更好、更清洁的解决方案。

PS:由于模块的限制,我不能使用 boost。

4

2 回答 2

1

您可以使用 aunion来存储和访问数据。这将允许联合的所有成员占用相同的内存,并且您可以访问适当的数据类型而无需强制转换。

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

union 可能是解决方案,但我想知道在推动 uint8_t、uint16_t、uint32_t 和 uint64_t 之后联合向量的大小是多少......?

我很喜欢简单的解决方案,所以我会尝试

std::vector<uint64_t>

在这种情况下,您可以插入所有值。

于 2013-08-09T17:38:18.367 回答