我正在处理的程序存在一个小问题。
我的程序在数组上执行一个函数。该函数只能执行数组前16个元素的命令。
我现在想要创建一个循环,以便该函数可以处理超过16个数组元素。这是我的想法,但它最终陷入了无限循环:
int l = 0;
for (int i=0; i<=size; i+16)
{
for (int j=0; j<=16;j++)
{
FUNCTION(INARRAY; OUTARRAY);
}
}
接下来的问题是该函数只会遍历数组的16个元素而忽略其余的元素。
让它走过接下来的16个元素并将其作为以下元素保存在outbuffer中的最佳方法是什么?
当我调整解决方案时,它仍然只处理前16个元素,然后不会继续下一个16个元素。
答案 0 :(得分:8)
此:
i + 16
不会更改i
的值,因此循环永远不会终止。该表达式只计算i + 16
的值,但结果将被丢弃。
要更改变量的值,请使用赋值(=
)运算符,例如i = i + 16
或i += 16
。
答案 1 :(得分:0)
我想我有你想要的东西。您必须执行它并检查它。请注意,如果您的数组大小是16的倍数,则此方法有效,否则将会有剩余的元素与已处理的元素配对。
int count16 = 0;
var tempAr[16];
for (int i=0; i<numOfArraysToGoThrough; i++)
{
tempAr[count16]=numOfArrayToGoThrough[i];
if ( count16 == 15)
{
FUNCTION (tempAr, OUTARRAY);
count16=0;
}
else
count16+=1;
}
答案 2 :(得分:0)
前一段时间出现了这个问题 这是我的工作方式
for (uint64_t i=0; i<size; i+=16)
{aes_encrypt(tfm, &tempbuffer[i], &inbuffer[i]);}
这样做如下 调用aes_encrypt会加密数组中前16个字节的数据, for循环然后跳转到第16个条目并再次执行加密