假设我们有十六进制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 }
我知道我可以循环输入但是,如果可能的话,我想以“更聪明的方式”(可能是移位或某种字典)来做。
答案 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]];
}