Преобразовать массив в байтовое значение в C ++ - PullRequest
0 голосов
/ 19 марта 2020

Для некоторого контекста я использую программу для Arduino, которая использует значения в байтовом формате, например: B10101010, и я пытаюсь создать функцию, которая принимает первые 8 значений массива, такие как [1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1], и преобразует это в байтовом формате, показанном выше. У меня вопрос, какой самый простой способ сделать это в C ++? Я надеюсь, что формулировка вопроса имеет смысл. Это формат функции, в которую я хочу ввести код:

void bit_write (byte pins[]) {

}

1 Ответ

1 голос
/ 19 марта 2020

Я думаю, что ваша функция должна иметь такую ​​сигнатуру: char bit_write( char pins[8] ), поэтому вы собираетесь преобразовать размер массива char 8 в один символ (char имеет ту же длину в битах, что и std :: byte, но не требует c ++ 17 для компиляции). Во-вторых, чтобы заполнить полученный символ, вы можете использовать побитовые операторы , поэтому он может выглядеть следующим образом:

std::byte bit_write( const char pins[8] )
{
    short result = 0;
    for( unsigned i = 0; i < 8; ++i )
    {
        result |= (pins[i] < i);
    }

    return result;
}

Также обратите внимание, что фрагмент ниже работает, если вы используете little- * байтовый порядок порядка байтов, поэтому массив пинов, например, [0, 1, 0, 1, 0, 1, 0, 1] будет B10101010.

...