2014-12-02 332 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)

相关问题