我很难理解如何以正确的顺序获取这些位
我的目标:
给出以下输入
char id = 0x02; //in binary => 0010
char somethingElse = 0xF; //in binary => 1111
如何获得以下输出
char result = ?; //in binary 0010 1111 (id somethingElse)
答案 0 :(得分:1)
char id = 0x02; //in binary => 0010
char somethingElse = 0xF; //in binary => 1111
char result = (id<<4) | somethingElse;
答案 1 :(得分:0)
我会使用更简单的移位操作,除非这些位经常被独立修改(比如某些格式规范的标题中的位)。在这种情况下,我将使用union和bit字段的组合。这是一个执行此操作的小程序
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的顺序。