2014-12-02 213 views
-3

我已經創建了一個函數,將一個無符號字符轉換爲大小爲8的無符號字符數組(其中每個索引包含0或1,組成給定字符的8位)。這裏是100%的工作版本:8位無符號字符數組到無符號字符

unsigned char * ucharToBitArray(unsigned char c) 
{ 
    unsigned char * bits = malloc(8); 

    int i; 
    for(i=sizeof(unsigned char)*8; i; c>>=1) 
     bits[--i] = '0'+(c&1); 

    return bits ; 
} 

我需要創建一個完全相反的函數。意思是說,它會取大小爲8的unsigned char數組,並將它變成一個常規的單個無符號字符。什麼是這樣做的有效方式?

感謝您的幫助!

+0

扭轉操作。本質上'c << = 1; c | = b [i ++] - '0'' – AShelly 2014-12-02 04:11:45

+0

你從哪裏被卡住了? – mafso 2014-12-02 06:46:52

+0

'sizeof(char)'總是1,你需要'i = CHAR_BIT' – 2014-12-02 07:23:50

回答

1

該功能是不必要的複雜和模糊。我建議用這個替換它:

void ucharToBitArray(char bits[8], uint8_t c) 
{ 
    for(uint8_t i=0; i<8; i++) 
    { 
    if(c & (1<<i)) 
    { 
     bits[7-i] = '1'; 
    } 
    else 
    { 
     bits[7-i] = '0'; 
    } 
    } 
} 

現在要將其轉換回來,只需轉到其他方式。如果您發現'1',請檢查bits[i],然後設置c |= (1<<i)