2012-05-10 6 views
0

16進数をビンに変換しようとしています。私がビット(0x101)を呼び出すと、それは明らかに間違っている00011を印刷します。私はかなり確かにforループです。何か案は??Cのビンへの16進数

int hextobin (int n){ 
    char buffer[33]; 

    if(n==0) { 
     putchar('0'); 
     return 0; 
    } 

    char *cp = buffer + 32; 
    *cp = 0; 
    for(int i =0;i <=sizeof(n); i++){ 
     --cp; 
     if(n & 1) *cp = '1'; 
     else *cp = '0'; 
     n >>= i; 
    } 
    printf(cp); 
    return 0; 
} 

答えて

2

あなたがnのうち、最後の1ビットをシフトすると、ビットがに対処するためにそこに残っていたとしても、それがゼロになり、あなたのループが中止されます。

あなたのコードを適切にインデントしてください。正しく書式設定されていると、読んだりデバッグしたりする方がずっと簡単です。

+0

どうすればこの問題を解決できますか?私はその行をどこか別の場所に移動しますか? – user1386132

+0

'while(n)'の代わりに、変換したい各ビットに対してfor()ループを実行する必要があります。例えば'for(int i = 0; i <= sizeof(n); i ++)'または同様のもの。私はC言語で働いていたので長い間されていたので、そのままでは動作しませんが、あなたを動かすのに十分なはずです。 –

+0

'for(int i = 0; i <= sizeof(n); i ++){ --cp; if(n&1)* cp = '1'; else * cp = '0'; n >> = i; } 'これは私のforループです。まだ正しいことを印刷していない。 – user1386132