2010-12-06 118 views

回答

6

我不知道有关的Adruino平台, 强加具体的限制,但这应该在任何标准的编译器工作。

char GetBitArrayAsByte(const char inputArray[8]) 
{ 
    char result = 0; 
    for (int idx = 0; idx < 8; ++idx) 
    { 
     result |= (inputArray[7-idx] << idx); 
    } 
    return result; 
} 

A test of this code is now on Codepad,如果 帮助。

+0

感谢您的“键盘”链接! +1 – detunized 2010-12-06 19:15:42

4
char lineOneC[8] = { 0, 1, 1, 0, 0, 0, 0, 1 }; 
unsigned char b = 0; 

for (int i = 7; i >= 0; i--) { 
    b |= lineOneC[i] << (7 - i); 
} 
5

只需将0或1移位到二进制格式的位置即可。像这样

char lineOneC[8] = {0,1,1,0,0,0,0,1}; 
char lineOneB = 0; 
for(int i=0; i<8;i++) 
{ 
    lineOneB |= lineOneC[i] << (7-i); 
} 
+0

+1为正确答案:) – 2010-12-06 19:15:35

0

如果你知道你的字符数组的值将始终是1或0:

char line[8] = { '0', '1', '1', '0', '0', '0', '0', '1'}; 

unsigned char linebyte = 0; 
for (int i = 7, j = 0; j < 8; --i, ++j) 
{ 
    if (line[j] == '1') 
    { 
     linebyte |= (1 << i); 
    } 
} 
0

如果结果应该是B01100001,那么字节0是MSB(最显著位),不是字节7 ...

char line[8] = { 0, 1, 1, 0, 0, 0, 0, 1 }; 
unsigned char b = 0; 
for (int ii = 0; ii < 8; ii++) 
{ 
    b <<= 1; 
    b |= line[ii]; 
} 

我见过其他的答案,如果我正确地阅读它们,把MSB的字节7

编辑:固定的报价;之前错过了它。

+0

你真的尝试过代码吗?这个答案不起作用,因为你引用了数字('0'不等于0)。子索引7是C和C派生语言列表中的第8项,因为数组从元素0开始,而不是元素1开始。 – 2010-12-07 00:49:17

相关问题