按长度检索NSData到Hex

时间:2011-10-18 09:48:48

标签: iphone objective-c hex nsdata

我得到的NSData包含像< 00350029 0033>这样的字节。长度为6,有没有正确的方法将字节分成数组,如(00,35,00,29,33)?

3 个答案:

答案 0 :(得分: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。)

答案 1 :(得分:0)

您可以使用NSData方法

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

获取给定范围内的字节(在使用malloc分配了适当数量的内存之后),然后使用

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

创建新的小(1个字节长)数据对象,然后将其放入数组中。但是,如果您只是检索指向字节本身的指针(使用[数据字节]),则会为您提供一个指针(C语义中的​​数组类型,不是NSArray,但也可以使用,效率更高)。

答案 2 :(得分: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];
}