所以我有一个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} */

09-06 03:55