我想C++/Arduino:如何将字符串/字符数组转换为字节?
char lineOneC[8] = {0,1,1,0,0,0,0,1};
转换成
byte lineOneB = B01100001;
如何在C++/Arduino的做到这一点?
我想C++/Arduino:如何将字符串/字符数组转换为字节?
char lineOneC[8] = {0,1,1,0,0,0,0,1};
转换成
byte lineOneB = B01100001;
如何在C++/Arduino的做到这一点?
我不知道有关的Adruino平台, 强加具体的限制,但这应该在任何标准的编译器工作。
char GetBitArrayAsByte(const char inputArray[8])
{
char result = 0;
for (int idx = 0; idx < 8; ++idx)
{
result |= (inputArray[7-idx] << idx);
}
return result;
}
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或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);
}
+1为正确答案:) – 2010-12-06 19:15:35
如果你知道你的字符数组的值将始终是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);
}
}
如果结果应该是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)。子索引7是C和C派生语言列表中的第8项,因为数组从元素0开始,而不是元素1开始。 – 2010-12-07 00:49:17
感谢您的“键盘”链接! +1 – detunized 2010-12-06 19:15:42