2014-12-02 6 views
-3

Я создал функцию, которая превращает unsigned char в массив unsigned char размером 8 (где каждый индекс содержит 0 или 1, составляя 8 бит данного символа). Вот 100% рабочая версия:unsigned char array из 8 бит в unsigned char

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 ; 
} 

Мне нужно создать функцию, которая прямо противоположна этому. Смысл, он примет и массив unsigned char размером 8 и превратит его в обычный одиночный символ без знака. Каков эффективный способ сделать это?

Спасибо за помощь!

+0

Обратные операции. по существу 'c << = 1; c | = b [i ++] - '0'' – AShelly

+0

Где вы застряли? – mafso

+0

'sizeof (char)' всегда 1, вам нужно 'i = CHAR_BIT' –

ответ

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'; 
    } 
    } 
} 

Теперь, чтобы преобразовать его обратно, просто идите наоборот. Установите bits[i], а затем установите c |= (1<<i), если вы нашли номер '1'.

Смежные вопросы