2015-11-02 28 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; 
    } 
} 
相關問題