我必须将给定的二进制输入(例如 1101)转换为十进制,但输入不是字符串数组或整数(传递的参数是const char *binstr
)。我应该如何访问二进制数的每个单独的数字,以便我可以对每个数字执行 pow(x,y) 并将它们加在一起以获得十进制数?
问问题
2267 次
4 回答
0
您可以尝试使用从二进制转换为十进制的程序
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);
于 2013-02-21T00:33:10.030 回答
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
并将它们存储在某个地方(可能是数组),您可以在其中访问它们进行计算。
于 2013-02-21T00:27:28.457 回答
0
binstr[0];
binstr[1];
binstr[2];
ETC
或者你可以通过指针来完成
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);
于 2013-02-21T00:20:47.580 回答
0
const char *
通常指的是 C 字符串。您可以使用strtol(3)
:
int x = strtol(binstr, NULL, 2);
于 2013-02-21T00:22:35.103 回答