假设二进制:11010000,存放在数组a[] = {1,1,0,1,0,0,0,0}中,且这个二进制低位放在高位(暂理解为小端序),要将这个数组里的二进制转为十进制。实现如下:
#include <stdio.h>
#include <string.h>
#include <math.h>
int main() {
char a[] = {1,1,0,1,0,0,0,0};
char b[sizeof(a)];
char c[sizeof(a)];
/**** 数组b存放倒序排列的数组a ********/
// 复制原始数组到新数组
memcpy(b, a, sizeof(a));
// 计算数组的中间位置
int mid = sizeof(a) / 2;
// 交换元素
for (int i = 0; i < mid; i++) {
char temp = b[i];
b[i] = b[sizeof(a) - i - 1];
b[sizeof(a) - i - 1] = temp;
}
// 打印结果
for (int i = 0; i < sizeof(b); i++) {
printf("%d", b[i]);
}
/**** 数组b元素转成十进制********/
int decimal = 0;
int size = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < size; i++) {
decimal += b[i] * pow(2, size - i - 1);
}
printf("\n");
printf("The decimal value of the binary array is %d\n", decimal);
return 0;
}