2013-02-21 77 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