2016-12-07 23 views
1

我想知道是否有人可以幫助我我只學習c,我試圖將無符號字符數組的內容分成兩半,結果可以存儲在兩個無符號廉政局,將無符號字符數組的內容分成兩半

例如目的,我有一些代碼下面增加了一個十六進制值轉換成字節數組,所以val的內容將如何分割[]爲兩個,但保持相同的順序

#include <stdio.h> 
typedef unsigned char BYTE; 
int main() 
{ 
    // Sample purposes putting hex into val[8] 
    int i,j; 
    long long hex=0x78661EB54FE76763; 
    BYTE val[8]; 

    for(j=0,i=7; i>=0; i--,j++){ 
     val[j]= (hex>>(i*8))&0xff; 
    }  

    // How to split the contents of val[8] which now holds the hex 

    return 0; 
} 

我我試圖將十六進制值拆分爲78661EB5,4FE76763,並將每個存儲在一個無符號整數內,該整數存儲在我的示例中的val [8]中

回答

0

您的變量long long hex不是一個「字符數組」,但您可以嘗試類似的方式,注意無符號整數類型。

#include <stdio.h> 
#include <stdint.h> 

int main(void) 
{ 
    uint64_t hex = 0x78661EB54FE76763; 
    uint32_t lo, hi; 

    hi = hex >> 32; 
    lo = hex & 0xFFFFFFFF; 
    printf("%08X %08X\n", hi, lo); 
    return 0; 
} 

程序輸出:

78661EB5 4FE76763 
+0

對不起,如果我的questain令人困惑,我的意思val [8]包含十六進制值78661EB54FE76763,這就是我想分裂。 –

+0

'val [8]'不包含任何東西,它是一塊踏腳石。你的問題問如何將該值分成2個無符號整型,這個答案不需要任何8字節字符數組。 –

+0

對不起,代碼很混亂,我正在用值填充BYTE val [8]。我正在嘗試分割BYTE val [8]。我已經讓示例更加混亂 –

0

創建一個輔助函數,需要一個指針的unsigned char陣列並調用它的兩倍。

讓OP發現一些事情。

unsigned long form_big_endian4(const unsigned char * x) { 
    unsigned long y = TBB;   // What should the initial value be? 
    for (int i = 0; i < TBD; i++) { // How many times to loop? 
    y *= TBD;      // Hint: max value of 8 bits + 1 
    y += x[i];      
    } 
    return y; 
} 

#include <stdio.h> 
int main(void) { 
    const unsigned char val[8] = 
     { 0x78, 0x66, 0x1E, 0xB5, 0x4F, 0xE7, 0x67, 0x63 }; 
    unsigned long half = form_big_endian4(val); // Why long: Hint how small can unsigned be? 
    printf("%08lX\n", half);     // Why 0 in format? Why `lX`? 
    half = form_big_endian4(val + TBD);   // How far an offset? 
    printf("%08lX\n", half); 
    return 0; 
}