【发布时间】:2017-09-22 09:50:42
【问题描述】:
我有一个名为 vector1 的无符号字符向量,我想以 8 字节块的形式遍历该向量,并使用 std::transform 函数对每个块执行按位运算。变换函数将异或的数据存储在 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;
}
这并没有按照我想要的方式执行。我还认为可能存在问题,因为我一次通过向量迭代 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));
}
}
【问题讨论】:
-
编辑:nvm,我理解错了你的问题^^
-
This is not performing the way I want it to.什么意思?? -
@gsamaras 我使用密码计算器对数据进行 XOR 的预期输出。当我在运行转换后查看 vector2 时,值是:128 '\200',十六进制:0x80。如果 Vector1 是 5555555555555555 并且 KEY_IV 是 1111111111111111 我希望 vector2 是 4444444444444444
-
itr += 8转换错误(未指定参数的评估顺序):您可能需要itr + 8。 -
谢谢@Jarod42,我将此添加到我的代码中,您是正确的,非常感谢。
标签: c++ vector iterator transform stdvector