0

これらのビットを正しい順序で取得する方法を理解するのに苦労しています

私の目標:

次の入力が与えられた

char id = 0x02; //in binary => 0010
char somethingElse = 0xF; //in binary => 1111

次の出力を取得するにはどうすればよいですか

char result = ?; //in binary 0010 1111 (id somethingElse)
4

2 に答える 2

1
char id = 0x02; //in binary => 0010
char somethingElse = 0xF; //in binary => 1111

char result = (id<<4) | somethingElse;
于 2012-10-01T18:55:43.887 に答える
0

ビットがしばしば独立して変更されない限り(あるフォーマット仕様のヘッダーのビットのように)、より単純なシフト操作を使用します。この場合、ユニオンとビットフィールドの組み合わせを使用します。これを行うための小さなプログラムがあります

int main (int argc, const char * argv[])
{
    @autoreleasepool {

        union {
            struct {
                unsigned char id:4;
                unsigned char somethingElse:4;
            } split;
            unsigned char combined;
        } value;

        value.split.id = 0x02;
        value.split.somethingElse = 0xF;

        NSLog(@"%02X", value.combined); // Outputs F2
    }
    return 0;
}

これが希望する順序でない場合は、idとsomethingElseの順序を逆にすることをお勧めします。

于 2012-10-01T19:02:02.917 に答える