在某些情况下,我正在为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]
答案 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
。