unsigned char数组为8位到unsigned char

时间:2014-12-02 03:20:23

标签: c char bit unsigned-char

我创建了一个函数,将unsigned char转换为大小为8的unsigned char数组(其中每个索引包含0或1,构成给定char的8位)。这是100%工作版本:

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数组,并将其转换为常规的单个unsigned char。这样做的有效方法是什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分: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'