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進数を出力する必要があります。

4

2 に答える 2

4

forループが16から0である理由がわかりません。OSでintが16ビットの場合は、forループを15から0に設定する必要があります。そうでない場合、OSでintが32ビットの場合は、 31から0へのforループ。したがって、コードは次のとおりです。

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;
}

入力(「0x10」、「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の正確なバイナリコードが取得されます。

于 2012-05-10T07:57:58.330 に答える
0

私はすでにこれらのほとんどを忘れていますが、 intの代わりにunsignedを使用してみてください

于 2012-05-10T06:13:21.587 に答える