2011-11-04 265 views

回答

3

是你的問題,將十進制數轉換爲十六進制格式,然後將該六進制數保存在一個整數。那麼這將這樣的伎倆

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
    char x[6]; 'just took 6,you can increase its size as per your int number 
       ' Though it uses only 3 elements in these example 
    int i; 
    int a; 
    i=837;    ' Load the i value with a decimal number say 837 
    sprintf(x,"%x",i); ' pass the hex format value to string x instead of stdout 
         ' x contains x[0] ='3' x[1] ='4' x[2] ='5' 
    a=atoi(x);   ' Convert the string format to integer 
    printf("%d",a);  ' outputs 345 
} 

注意 的Hexanumbers甚至可能包括ABC和對於這一點,我不正是你是什麼邏輯會知道呢?忽略它或任何其他轉換?如果六進制數是3ab,你會存儲什麼?

+0

介意由'sprintf'添加到數字(在這種情況下寫'x [4] = 0)的空終止以避免緩衝區溢出。 .. – moooeeeep

+0

FWIW,'(sizeof(int)* CHAR_BIT + 3)/ 4 + 1'對於任何輸入都是一個足夠大的數組。另外,儘管我懷疑你會發現一個重要的實現,'x'格式說明符需要一個'unsigned int'參數,並且你已經給它一個'int'。 –

+0

你如何處理a,b,c,d,e和f? – cokedude

1

我不知道你想做什麼,十六進制數字範圍是從0..F你不能存儲一個十進制數字(0..9)任意十六進制值。十六進制345的值是837。另一個有效的十六進制表示說「ABC」不能按照你描述的方式轉換。

要將值從十六進制轉換爲整數,你可以使用sscanf

與格式字符串「%X」

​​

i之後將837

注意前面的「 0x「已被省略。

+0

感謝您的回覆,但我要求senario爲其存儲的變量,我想隔離它的十六進制形式的每個數字,正如你所說的存儲爲837,但我想隔離它的十六進制值的每個數字 – Anudeep

+0

@Anudeep你想要在不同的變量中的每個數字?你有什麼樣的變量存儲你的十六進制數字?請更新您的問題 - 這些信息非常重要。 – nos

+0

@stacker我更新了問題 – Anudeep

0
int i = 0; 
sscanf(yourhexstring , "%x", &i); 
+0

感謝您的回覆,但我要求senario爲其存儲的變量,我想隔離它的十六進制表格的每個數字 – Anudeep

1

所以,仔細閱讀問題,實施pmganswer後,認爲:

#include <stdio.h> 

int main() { 
    int i = 0x345; 
    int j = 1; 
    int result = 0; 
    do { 
    result += (i&0xf)*j; 
    j *= 10; 
    } while (i/=(0x10)); 
    printf("%i\n", result); 
} 

這個效果很好,除非有十六進制數字(i&0xf) > 0x9

例如,在int i = 0xABC的情況下,十進制數字的範圍顯然不足以代表(如stacker指出的)數字s.t.這個十六進制值會產生類似1122的東西。我不知道你希望在這種情況下能夠產生什麼功能。也許你應該擴展你的規範。

0

隔離每個hexdigit;由10個正確的電源乘法和加法的所有產品:

0x345 ==> 5 * 1 = 5 
0x345 ==> 4 * 10 = 40 
0x345 ==> 3 * 100 = 300 
        + --- 
        345 
+0

感謝您的回覆,但我該如何乘以該十六進制數?我將837存儲在變量中,其十六進制表示形式爲0x345。 – Anudeep

+0

要隔離最不重要的4位,你可以用'(variable&240)>> 4'來執行下一個4位的變量& 15';; ... *注意:15是0xF,240是0xF0 * – pmg

0

如果字符串總是有前綴「0X」,你可以用atoi(str+2)它。

atoi函數接受一個字符串參數,並試圖將其轉換爲十進制整數。通過在字符串中添加2,可以跳過字符串中的兩個第一個字符。

請注意,十六進制數字345與十進制數字345不相同。0x345是十進制837,345十進制是159十六進制。

相關問題