我需要一个函数(在C语言中),它可以将数组的二进制内容(在本例中为myArray[8] {*MSB* 1, 1, 1, 1, 1, 1, 1, 1 *LSB*}
)转换为十进制等值= 255.
关于如何在微控制器上尽可能高效地解决这个问题的想法?
答案 0 :(得分:4)
使用按位移位
#include <stdio.h>
int main(void) {
char myArray[8] = {1,1,1,1,1,1,1,1};
int i;
int result = 0;
for (i=0; i<sizeof(myArray); i++){
result += myArray[sizeof(myArray)-i-1] << i;
}
printf("%d\n", result);
return 0;
}
答案 1 :(得分:2)
一种解决方案是添加和转移Horner scheme。
result = (...((myArray[0])<<1 + myArray[1])<< 1+ ... ) << 1 ... ) + myArray[8];
或多个表达式:
result = myArray[0];
result <<= 1;
result += myArray[1];
result <<= 1;
...
result += myArray[8];
此解决方案适用于MSB.
答案 2 :(得分:1)
#include <stdio.h>
int main()
{
int a[8] = {1,1,1,1,1,1,1,1};
int n=8,dec=0;
int j=0,f;
for(int i=(n-1);i>=0;i--)
{
dec=(a[i]*(int)pow(2,j))+dec;
j++;
}
printf("The converted Decimal number is: %d",dec);
return 0;
}
输出:转换后的十进制数为:255
结果也可在以下网址获得:http://ideone.com/NQK0Il
答案 3 :(得分:1)
设置for循环
unsigned int result = myarray[0];
for (int i = 1; i < 8, i++);
{
result <<= 1;
result += myarray[i];
}