簡體   English   中英

Objective-C-十六進制到無符號字符數組算法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM