在C ++中将数组转换为字节值

时间:2020-03-19 07:43:42

标签: c++ list arduino byte

在某些情况下,我正在为Arduino使用一个程序,该程序使用字节格式的值,例如:B10101010,并且尝试创建一个函数,该函数采用像这样的数组的前8个值{{1 },并将其转换为上面显示的字节格式。我的问题是在C ++中最简单的方法是什么?我希望这个问题的措辞有意义。这是我要输入代码的函数的格式:

[1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]

1 个答案:

答案 0 :(得分:1)

我认为您的函数应该具有这样的签名:char bit_write( char pins[8] ),因此您将要将大小为8的char数组转换为单个char(char与std :: byte具有相同的位长,但没有需要c ++ 17进行编译)。其次,您可以使用bitwise operators来填充结果字符,因此它看起来可能像这样:

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-endian个字节顺序,则下面的代码段将起作用,因此,像[0, 1, 0, 1, 0, 1, 0, 1]这样的pin数组将为B10101010

相关问题