これらのビットを正しい順序で取得する方法を理解するのに苦労しています
私の目標:
次の入力が与えられた
char id = 0x02; //in binary => 0010
char somethingElse = 0xF; //in binary => 1111
次の出力を取得するにはどうすればよいですか
char result = ?; //in binary 0010 1111 (id somethingElse)
これらのビットを正しい順序で取得する方法を理解するのに苦労しています
私の目標:
次の入力が与えられた
char id = 0x02; //in binary => 0010
char somethingElse = 0xF; //in binary => 1111
次の出力を取得するにはどうすればよいですか
char result = ?; //in binary 0010 1111 (id somethingElse)
char id = 0x02; //in binary => 0010
char somethingElse = 0xF; //in binary => 1111
char result = (id<<4) | somethingElse;
ビットがしばしば独立して変更されない限り(あるフォーマット仕様のヘッダーのビットのように)、より単純なシフト操作を使用します。この場合、ユニオンとビットフィールドの組み合わせを使用します。これを行うための小さなプログラムがあります
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の順序を逆にすることをお勧めします。