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 回答