向量元素串联成一个32位字

时间:2019-07-10 17:31:00

标签: c++ vector char uint32

我试图将四个元素的向量连接成一个4字节的字,以表示为uint32_t。

对不起,我没有我的代码,但这是我想要做的:

向量v; //每个元素都是一个字节,包含四个元素 v [0],v [1],v [2],v [3] 将这四个元素连接起来组成一个单词(我猜是char [32]?)[0] [1] [2] [3]用作uint32_t。

我曾尝试将v [0,1,2,3]更改为字符串,然后使用循环将字符串追加,但是无论出于何种原因,最终结果都是添加了错误的位。

非常感谢大家的帮助!

1 个答案:

答案 0 :(得分:1)

您要查找的是位移按位或,例如:

std::vector<uint8_t> v;
// fill v with 4 bytes as needed...
uint32_t i = (uint32_t(v[X1]) << 24) | (uint32_t(v[X2]) << 16) | (uint32_t(v[X3]) << 8) | uint32_t(v[X4]);

X1..X4是向量中所需的字节索引,具体取决于要用于uint32_t的字节序。

或者,如果向量元素已经按照您希望uint32_t所在的字节序正确的字节顺序,则可以按原样memcpy()个字节:

std::vector<uint8_t> v;
// fill v with 4 bytes as needed...
uint32_t i;
std::memcpy(&i, v.data(), 4);