gpt4 book ai didi

c++ - 一次迭代 Vector 8 字节并执行按位运算

转载 作者:行者123 更新时间:2023-11-28 04:59:47 24 4
gpt4 key购买 nike

我有一个名为 vector1 的无符号字符 vector ,我想以 8 字节为单位遍历该 vector ,并使用 std::transform 函数对每个 block 执行按位运算。转换函数将 XOR 数据存储在 vector2 中。这是我目前拥有的:

 for (std::vector<unsigned char>::iterator itr = vector1.begin(); itr != vector1.end(); itr += 8)
{
// vector1 data XOR'd with KEY_IV data and output to vector2
std::transform(itr, itr += 8, std::begin(KEY_IV), std::begin(vector2), std::bit_xor<unsigned char>());

if (itr == vector1.end())
break;
}

这没有按照我想要的方式执行。我还认为可能存在问题,因为我一次通过 vector 迭代 8 个字节,并且还在转换函数中执行相同的操作。我在转换中需要两个 (itr, itr += 8) 吗?

谢谢。

编辑检查 vector1 是否为 8 的倍数,如果不是,则用 0 填充

// check vector1 for multiples of 8, if not, pad out with 0's
for (std::vector<unsigned char>::iterator itr = vector1.begin(); itr != vector1.end(); itr += 8)
{
if ((vector1.size() % 8) != 0)
{
vector1.push_back(fmod(vector1.size(), 8));
}
}

最佳答案

你正在变异 itr在调用 std::transform .您有未指定的行为,因为它再次出现在参数列表中。

assert((vector1.size() % 8) == 0, "bad times!");
for (std::vector<unsigned char>::iterator itr = vector1.begin(); itr != vector1.end(); itr += 8)
{
// vector1 data XOR'd with KEY_IV data and output to vector2
std::transform(itr, itr + 8, std::begin(KEY_IV), std::begin(vector2), std::bit_xor<unsigned char>());
}

std::begin(vector2)也很可疑,您只写过 vector2 的前 8 个元素.你的意思是提前到达目的地?

assert((vector1.size() % 8) == 0, "bad times!");
auto dest = std::begin(vector2);
for (auto itr = vector1.begin(); itr != vector1.end(); itr += 8)
{
// vector1 data XOR'd with KEY_IV data and output to vector2
dest = std::transform(itr, itr + 8, std::begin(KEY_IV), dest, std::bit_xor<unsigned char>());
}

这可以通过循环 vector1.size() / 8 变得更安全(丢弃断言)次,然后执行最后一个较短的异或运算。

size_t count = vector1.size() / 8;
auto itr = vector1.begin();
auto dest = std::begin(vector2);
for (; --count; itr += 8)
{
// vector1 data XOR'd with KEY_IV data and output to vector2
dest = std::transform(itr, itr + 8, std::begin(KEY_IV), dest, std::bit_xor<unsigned char>());
}
std::transform(itr, vector1.end(), std::begin(KEY_IV), dest, std::bit_xor<unsigned char>());

关于c++ - 一次迭代 Vector 8 字节并执行按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46361782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com