2011-10-18 29 views
1

我有一個NSData包含字節像< 00350029 0033>長度爲6,是否有任何正確的方法來分割字節像數組莫名其妙像(00,35,00,29,00,33 )?檢索NSData到十六進制的長度

+0

的可能重複[如何一個NSData轉換成一個NSString十六進制字符串?](http://stackoverflow.com/questions/7520615/how-to-convert-an-nsdata-into-an-nsstring-hex-string) –

回答

4
NSData *data = ...; 
NSMutableArray *bytes = [NSMutableArray array]; 
for (NSUInteger i = 0; i < [data length]; i++) { 
    unsigned char byte; 
    [data getBytes:&byte range:NSMakeRange(i, 1)]; 
    [bytes addObject:[NSString stringWithFormat:@"%x", byte]]; 
} 
NSLog(@"%@", bytes); 

(假設你想要的字節爲十六進制字符串表示,如在你的榜樣。否則,使用NSNumber

0

你可以使用NSData的方法

- (void)getBytes:(void *)buffer range:(NSRange)range 

獲得給定範圍內的字節數(已分配的內存適量後,用malloc),然後用

+ (id)dataWithBytes:(const void *)bytes length:(NSUInteger)length 

創建新的小(1字節長)數據對象,然後將其放入數組中。但是,如果你只是檢索指向字節本身的指針(使用[數據字節]),它會給你一個指針(C類意義上的數組類型,而不是NSArray,但也可以使用並且效率更高)。

0
static NSString* HexStringFromNSData(NSData* data) { 
    NSUInteger n = data.length; 
    NSMutableString* s = [NSMutableString stringWithCapacity:(2 * n)]; 
    const unsigned char* ptr = [data bytes]; 
    for(NSUInteger i = 0; i < n; i++, ptr++) { 
     [s appendFormat:@"%02x", (long)*ptr]; 
    } 
    return [NSString stringWithString:s]; 
}