2010-12-06 79 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

相關問題