所以我有一个16个字符的数组,定义如下。
char CBlock[16];
在我的程序中,我正在实现CTR模式加密(不是很重要,只是说),并且CBlock被初始化为随机的128位十六进制值。我的程序需要做的是,在循环进行加密的消息块的同时,将该块增加1倍。即
for (i = 0; i < SOME_BIG_NUMBER; i++){
CBlock = CBlock + 1; /*i know this isn't legal*/
/*do some stuff*/
}
有没有简单的方法可以进行此添加?有没有办法我可以简单地将CBlock视为一个连续的数据块?还是我必须手动执行进位等的二进制(十六进制)加法运算。
编辑:抱歉,CBlock声明错误。
最佳答案
通常,您可以通过跟踪进位来自己实现加法。
unsigned char CBlock[16]; /* unsigned char is assumed to be at least an 8 bit type. */
/* Increment CBlock by 1. */
int carry = 1;
int i;
for (i=0; i<16; i++) {
int sum = CBlock[i] + carry;
CBlock[i] = (unsigned char) (sum & 0xff);
carry = sum >> 8;
if (carry == 0) {
break;
}
}
/* if (carry > 0) { we have overflowed} */