将向量元素串联成一个 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);
我正在尝试将一个包含四个元素的向量连接成一个 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);