Objective-C - Hex到unsigned char数组算法

时间:2015-09-17 13:34:56

标签: objective-c arrays hex

假设我们有十六进制0x83,其具有二进制表示:

  1  0  0  0  0  0  1  1  <- binary
-------------------------
  8  7  6  5  4  3  2  1  <- position
-------------------------
 13 12 11 10 03 02 01 00  <- mapping value

如果指定位置上有“1”,则显示的值将显示在输出数组中。在上面的示例中,输出数组应为:

unsigned char output[] = { 0x13, 0x01, 0x00 }

另一方面,如果输入为0xFF,则输出应为:

unsigned char output[] = { 0x13, 0x12, 0x11, 0x10, 0x03, 0x02, 0x01, 0x00 }

我知道我可以循环输入但是,如果可能的话,我想以“更聪明的方式”(可能是移位或某种字典)来做。

1 个答案:

答案 0 :(得分:0)

你可以将它与面具进行比较,像这样:

//    1111 1110 FE
//    1111 1101 FD
//    1111 1011 FB
//    1111 0111 F7
//    1110 1111 EF
//    1101 1111 DF
//    1011 1111 BF
//    0111 1111 7F

int i = 0x83;

NSMutableArray *ar = [[NSMutableArray alloc] init];

if ((i&0x7F) != i) {
    [ar addObject:[NSNumber numberWithInteger:0x13]];
}
if ((i&0xBF) != i) {
    [ar addObject:[NSNumber numberWithInteger:0x12]];
}
if ((i&0xDF) != i) {
    [ar addObject:[NSNumber numberWithInteger:0x11]];
}
if ((i&0xEF) != i) {
    [ar addObject:[NSNumber numberWithInteger:0x10]];
}
if ((i&0xF7) != i) {
    [ar addObject:[NSNumber numberWithInteger:0x03]];
}
if ((i&0xFB) != i) {
    [ar addObject:[NSNumber numberWithInteger:0x02]];
}
if ((i&0xFD) != i) {
    [ar addObject:[NSNumber numberWithInteger:0x01]];
}
if ((i&0xFE) != i) {
    [ar addObject:[NSNumber numberWithInteger:0x00]];
}