将数组中的位转换为十进制数

时间:2016-02-11 10:31:35

标签: c

我需要一个函数(在C语言中),它可以将数组的二进制内容(在本例中为myArray[8] {*MSB* 1, 1, 1, 1, 1, 1, 1, 1 *LSB*})转换为十进制等值= 255.

关于如何在微控制器上尽可能高效地解决这个问题的想法?

4 个答案:

答案 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];
}