C ++ / Arduino: как преобразовать строку / массив символов в байты? - PullRequest
4 голосов
/ 06 декабря 2010

Я хочу конвертировать

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

в

byte lineOneB = B01100001;

Как мне это сделать в C ++ / Arduino?

Ответы [ 5 ]

6 голосов
/ 06 декабря 2010

Я не уверен насчет конкретных ограничений, накладываемых платформой Adruino, но это должно работать на любом стандартном компиляторе.

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

Тест этого кода теперь выполняется на Codepad , если это поможет.

5 голосов
/ 06 декабря 2010

Просто сдвиньте 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);
}
4 голосов
/ 06 декабря 2010
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 );
}
0 голосов
/ 06 декабря 2010

Если результат должен быть 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 голосов
/ 06 декабря 2010

Если вы знаете, что значения вашего массива символов всегда будут либо 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);
    }
}
...