我创建了一个函数,将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。这样做的有效方法是什么?
感谢您的帮助!
答案 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'
。