2

配列に格納されている各文字のビットを出力しようとしています。私はいくつかのコードを調べて、自分のニーズに合ったバージョンを試しました。問題は、配列の最初の文字しか取得していないように見えることです。

//read_buffer is the array I want to iterate through, bytes_to_read is the number of 
//index positions I want to_read. (array is statically allocated and filled using read()
//funct, therefore there are some garbage bits after the char's I want), bytes_to_read
//is what's returned from read() and how many bytes were actually read into array
void PrintBits(char read_buffer[], int bytes_to_read)
{

        int bit = 0;
        int i = 0;
        char char_to_print;

        printf("bytes to read: %d\n", bytes_to_read); //DEBUG

        for (; i < bytes_to_read; i++)
        {
                char_to_print = read_buffer[i];

                for (; bit < 8; bit++)
                {
                        printf("%i", char_to_print & 0X01);
                        char_to_print >> 1;
                }
                printf(" ");
                printf("bytes_to_read: %d -- i: %d", bytes_to_read, i);
        }

        printf("\n");
}

基本的に私が得ているのは次のとおり00000000 です。これがなぜなのかわかりません。デバッグを通じて、最初のビットのみを印刷し、他には何も印刷していないことがわかりました。また、外側のループが実際に int の 0 ~ 29 を反復処理していることも証明しました。したがって、配列内の char を反復処理する必要があります。私は困惑しています。

また、誰かが声明& 0x01で何をしているのか教えてもらえますか。printf他の人のコードでそれを見つけましたが、よくわかりません。

4

3 に答える 3

7

あなたはそれを逃した

                   char_to_print >>= 1;

char_to_print はシフトされず、保存されました

そして、毎回新しい char_to_print でビットを初期化する必要があります

            for (bit = 0; bit < 8; bit++)
于 2012-04-28T19:11:54.477 に答える