[英]Objective-C - Hex to unsigned char array algorithm
假設我們有十六進制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 }
我知道我可以遍歷輸入,但是,如果可能的話,我想以“更智能的方式”(可能是移動或某種詞典)來完成。
您可以將其與面罩進行比較,如下所示:
// 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]];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.