我很难理解如何以正确的顺序获取这些位
我的目标:
给定以下输入
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 的顺序。