我必须将给定的二进制输入(例如1101)转换为十进制,但输入不是字符串数组或整数(传递的参数是const char *binstr
)。我怎么能访问二进制数的每个数字,所以我可以在每个数字上做pow(x,y)并将它们加在一起得到十进制数?
答案 0 :(得分:0)
binstr[0];
binstr[1];
binstr[2];
等
或者你可以通过指针
来完成char* s = binstr;
unsigned long x =0;
while(*s) { x = x << 1; x |= (*s == '1' ? 1:0); s++;}
printf("the decimal of %s is %ul", binstr, x);
答案 1 :(得分:0)
const char *
通常是指C字符串。您可以使用strtol(3)
:
int x = strtol(binstr, NULL, 2);
答案 2 :(得分:0)
你已经创建了一个c string
,你可以使每个角色的方式类似于数组:
input[i]
以下是将二进制字符串拆分为单个位(字符)并将其打印出来的示例:http://cfiddle.net/wYtKJv
你可以使用循环:
while(i<100){
if(binstr[i]== '\0'){
break;
}
printf("First Bit:\n%c\n\n",binstr[i]);
i++;
}
由于C字符串为空终止,您可以检查我们点击的字符是'\0'
到break
循环。
在循环中,您还可以将chars
转换为ints
并将其存储在某个位置(可能是数组),您可以在其中进行计算。
答案 3 :(得分:0)
您可以尝试使用此程序从Binary转换为Decimal
char *binstr = "1011011";
int num = 0, sum = 0, ctr = 0;
ctr = strlen(binstr) - 1;
do{
sum += ((binstr[ctr] & 0x1) << num);
ctr--;
num ++;
}while(ctr >= 0);