2013-02-21 131 views
2

我必须将给定的二进制输入(例如1101)转换为十进制,但输入不是字符串数组或整数(传递的参数是const char *binstr)。我应该如何访问二进制数字的每个单独的数字,以便我可以对每个数字执行pow(x,y)并将它们加在一起得到小数?访问字符串中的元素?

+0

取决于编码... – Bingo 2013-02-21 00:23:08

+0

你能告诉你的输入是什么样一个完整的定义? – 2013-02-21 00:24:56

+0

“二进制输入”是什么意思?你的'binstr'指向'char'元素数组的第一个元素;是那些可打印的数字“0”和“1”,或者它们是数字值“0”还是“1”,或者它们是别的什么? – 2013-02-21 00:47:25

回答

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); 
+0

我似乎无法看到让binstr [i]给出正确的输出。如果我尝试打印一个像printf(“%d”,binstr [2])这样的元素,我没有得到正确的输出,例如用char * binstr =“1101”;对于binstr [0],binstr [1]和binstr [3],对于binstr [2]我得到49。 – Adam 2013-02-21 00:38:18

+0

哦,它的一个字符printf(“%c”,binstr [2]);将打印字符....字符'1'是十六进制31 ...你可以做printf(“%d”,binstr [2] - 0x30);这会给你所期待的,我认为 – 2013-02-21 00:39:57

+0

48是字符“0”的ASCII编码。如果'c'是'0'或'1',则'c''0'是'0'或'1'。 – 2013-02-21 00:40:13

0

const char *做到这一点通常是指C字符串。你可以只用strtol(3)

int x = strtol(binstr, NULL, 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并将它们存储在某个位置(可能是数组),您可以在其中存取它们进行计算。

+0

我似乎无法让binstr [i]给出正确的输出。如果我尝试打印一个像printf(“%d”,binstr [2]);'这样的元素,我没有得到正确的输出 'char * binstr =“1101”;',对于binstr [0],binstr [1]和binstr [3],对于binstr [2]我得到49。 – Adam 2013-02-21 00:34:02

+0

我不知道你为什么选择循环100次,但是你应该使用'while(* ptr){/ * ... * /}' – 2013-02-21 00:35:54

+0

@EdS。那么,这取决于十进制数的大小,这是夸大的。 – turnt 2013-02-21 00:38:36

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); 
+1

'(binstr [ctr]&0x1)'对字符“0”和“1”的数字表示进行了假设。这个假设几乎可以肯定是有效的,但是除非你真的需要从代码中挤出最后一个CPU周期,否则最好更清楚。 – 2013-02-21 00:41:52

+0

在这个问题中,提到输入是一个二进制字符串。因此,代码只考虑2个符号“0”和“1”。我不确定我是否完全理解你的观点。 – Ganesh 2013-02-21 00:44:17

+0

我假设(我仍然认为)该字符串由数字“0”和“1”构成,而不是“0”和“1”。也许我错了;这个问题并不完全清楚。 – 2013-02-21 00:46:03