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

Concatenation of vector elements into one 32-bit word

我正在尝试将一个包含四个元素的向量连接成一个 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] 更改为字符串,然后使用循环附加字符串,但无论出于何种原因,最终结果都是添加了错误的位。

非常感谢大家的帮助!

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

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() 字节 as-is:

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