2012-05-10 251 views
0
int hex2bin (int n) 
{ 
    int i,k,mask; 
    for(i=16;i>=0;i--) 
    { 
    mask = 1<<i; 
    k = n&mask; 
    k==0?printf("0"):printf("1"); 
    } 
    return 0; 
} 

我需要這個工作任何十六進制給我作爲輸入。含義hex2bin(0x101)hex2bin(0x04)應該打印出它們各自的二進制數字。轉換十六進制到二進制

+2

請不要在「C - 」等前加上標題。這就是標籤的用途。 –

+0

下面是用Java編寫的等效函數:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/lang/Integer.java#Integer.toBinaryString%28int %29 –

+0

你的正確輸出(12位)對我來說似乎是錯誤的。如果你只需要12位,把i = 16更改爲1 = 12 – kgiannakakis

回答

4

我不明白,爲什麼for循環是從16到0 如果int是16位的OS, 你應該設置爲循環從15到0, 否則,如果int是在OS 32位, 你應該設置從31環爲0 因此代碼:

int hex2bin (int n) 
{ 
    int i,k,mask; 
    for(i=sizeof(int)*8-1;i>=0;i--) 
    { 
    mask = 1<<i; 
    k = n&mask; 
    k==0?printf("0"):printf("1"); 
    } 
return 0; 
} 

如果你想顯示任何輸入(如「0×10」,「爲0x4」),可以聲明這樣的功能:

int hex2bin (const char *str) 
{ 
char *p; 
for(p=str+2;*p;p++) 
{ 
    int n; 
    if(*p>='0'&&*p<='9') 
    { 
     n=*p-'0'; 
    } 
    else 
    { 
     n=*p-'a'+10; 
    } 
    int i,k,mask; 
    for(i=3;i>=0;i--) 
    { 
     mask=1<<i; 
     k=n&mask; 
     k==0?printf("0"):printf("1"); 
    } 

} 
return 0; 
} 

然後,調用HEX2BIN(「0x101」)將得到確切的二進制代碼0x101。

+0

通常我會用一個整數作爲參數調用函數。有沒有辦法將int作爲char *將其作爲參數傳遞給hex2bin? – user1386132

+0

如果你的參數是整數,只需使用第一個code.Call第一個hex2bin,試試看,沒關係。 – Mazheng

0

我已經忘記了大多數的這些,但試圖利用的無符號代替INT

+1

不錯的建議,但只有涉及的數量是負數時纔會有所作爲。 –

相關問題