13

char のバイナリ表現を出力するための本当に基本的な方法が必要です。サンプルコードがどこにも見つからないようです。

数行でできると思っていたのですが、今まで使ったことのない多くの関数を使って非常に長くて複雑なものが見つかりました。atoiよく出てきますが、標準ではありません。

char 変数を取得してバイナリ表現を出力する単純な関数または関数を作成する簡単な方法はありますか?

例: char 'x' は関数が受け取る引数で、"x is 0111 1000" が出力されます。

これは、文字列のユーザー入力を取得し、文字列をバイナリで出力する必要がある学校の課題用です。文字をバイナリに変換する基本を取得する必要があるだけですが、現在苦労しています。

4

4 に答える 4

23

やりたいことは、ビット単位の演算子を使用してビットを 1 つずつマスクし、それらを標準出力に出力することです。

  1. Cの Acharは 1 バイトであることが保証されているため、 にループし8ます。
  2. 各反復内で、最上位ビットをマスクします。
  3. 取得したら、標準出力に出力するだけです。

これがうまくいけば理にかなっている簡単な刺し傷です...

main() {
  char a = 10;
  int i;
  for (i = 0; i < 8; i++) {
      printf("%d", !!((a << i) & 0x80));
  }
  printf("\n");

  return 0;
}

コードパッド

ビットを取得するために、左にシフトして番号付きビットを取得し (最も高いものから最も低いものへと並べるので、簡単に印刷できます)、それをマスクします。次に、0または1で翻訳し!!ます。

于 2013-08-20T05:18:22.433 に答える
2

この方法を使用できます

const char *byte_to_binary(int x)
{
    static char b[9];
    b[0] = '\0';

    int z;
    for (z = 128; z > 0; z >>= 1)
    {
        strcat(b, ((x & z) == z) ? "1" : "0");
    }

    return b;
}

バイナリ表現を取得して印刷する

例えば

 printf("%s\n", byte_to_binary(15));
于 2013-08-20T05:18:37.023 に答える
2
void printBits(size_t const size, void const * const ptr)
{
    unsigned char *b = (unsigned char*) ptr;
    unsigned char byte;
    int i, j;

    for (i=size-1;i>=0;i--)
    {
        for (j=7;j>=0;j--)
        {
            byte = b[i] & (1<<j);
            byte >>= j;
            printf("%u", byte);
        }
    }
    puts("");
}

int main(int argv, char* argc[])
{
        int i = 23;
        uint ui = UINT_MAX;
        float f = 23.45f;
        printBits(sizeof(i), &i);
        printBits(sizeof(ui), &ui);
        printBits(sizeof(f), &f);
        return 0;
}
于 2013-08-20T05:19:51.730 に答える
1

これを試して:-

#include <limits.h>
char *chartobin ( unsigned char c )
{
    static char bin[CHAR_BIT + 1] = {0};
    int i;
    for( i = CHAR_BIT - 1; i >= 0; i-- )
    {
        bin[i] = (c % 2) + '0';
        c /= 2;
    }
   return bin;
}
于 2013-08-20T05:22:02.553 に答える