2012-06-19 37 views
0

我有一個串x,我需要轉換爲十六進制格式:如何將包含0或1的char數組轉換爲C中的小數?

char x[5]; 
x[0]='0'; 
x[1]='1'; 
x[2]='0'; 
x[3]='1'; //x contains value of 0xA or decimal 10; 
x[4]='\0'; 

現在我怎麼能轉換這個並將其存儲到一個無符號整型變量,因此該變量是有價值的是0xA;

謝謝。

+1

這個數字是101,實際上是0x5的。 – LeopardSkinPillBoxHat

+3

@LeopardSkinPillBoxHat:取決於你閱讀它的方向。 – nhahtdh

回答

2

看來,號碼存儲在相反方向,這是不自然的人類閱讀,但很自然的方式來表示號碼作爲索引指的是2的冪應該應用。

沒有現有的庫做轉換爲你,你需要編寫代碼來自己解析它:

int i = 0; 
unsigned int result = 0; 

while (x[i]) { 
    result |= (x[i] == '1') << i; 
    i++; 
} 
+0

謝謝。我正在尋找一個圖書館,但這是訣竅。 – SSS

+0

@SS .:我不認爲有任何,至少在標準的。外部庫可能有。 – nhahtdh

+0

這有我的位反轉,所以一個0001的字符數組實際返回8而不是1.這是由於什麼?字節序? – ddelnano

1
char *x = "0101"; 

不等於0xA或十進制10.二進制'1010'會,也許這就是你的意思?

簡單的方法來轉換字符串表示的數字是strtol,其他許多函數,如atoi。 strtol至少允許提供一個基數。

http://www.cplusplus.com/reference/clibrary/cstdlib/strtol

喜歡的東西:

unsigned long val = strtol(x, NULL, 2); 
+0

我應該澄清,數組的元素0被認爲是最不重要的。因此char * x =「1010」。 – SSS

+0

好的,如果字符串像這樣正確存儲,那麼strtol應該可以正常工作。否則,你可能不得不翻轉字符串或自己解析它。 –

+0

謝謝尼克。我想這不起作用,因爲我把它存儲在相反的順序。 – SSS

2

爲什麼在相反的順序x中的字符串?

char x[5] = {'1', '0', '1', '0' }; 
unsigned int result = 0; 
int i = 0; 
while(x[i] != 0) 
{ 
    result = result * 2 + x[i]-'0'; 
} 
+0

我認爲這對我來說不起作用,因爲我以相反的順序。謝謝。 – SSS

相關問題