2015-11-02 93 views
-1

我有一些unsigned char数组。我想代表一个大号码,并为这个大号码添加一个号码。如何用数字表示的数字在C中表示为数组?

所以,比如我有这六个要素:

0x00, 0x00, 0x00, 0x00, 0x00, 0xdf 

我想补充0x11并获得

0x00, 0x00, 0x00, 0x00, 0x00, 0xf0 

所以,如果我以后添加0x10,我应该有

0x00, 0x00, 0x00, 0x01, 0x00 

我可以用二进制操作或其他方法来完成吗?循环?我的阵列可能比六个元素大得多。

+1

告诉我们你试过的是...这功课? – kebs

+0

看看BigInteger的任何实现(取自Java的名称):有很多可以通过Google搜索的答案。 – BeyelerStudios

+0

如果你的数组有100个元素,那么考虑到进位如何工作,给它加1会影响从1到100个数组元素的任何地方 - 所以无论是循环还是递归都是必要的,递归看起来不太合适。一个简单的while循环实现你在小学时学到的东西,这似乎是自然选择。 –

回答

0

您从源数组中总结每对字节,如果结果大于0xFF,则将1带到下一个字节。一个循环是必需的。

//Adds B to A, Len is the amount of bytes that will be added. 
//Make sure that Len <= size of A 
void Add(unsigned char *A, unsigned char *B, int Len) 
{ 
    int Carry = 0; 

    //Work backwards because the high byte of your array holds the least significant byte. 
    for (int i = Len - 1; i >= 0; i--) 
    { 
     int Temp = (int) A[i] + B[i]; 
     A[i] = (Temp + Carry) & 0xFF; 
     if ((Temp + Carry) > 0xFF) 
      Carry = 1; 
     else 
      Carry = 0; 
    } 
}