我得到的NSData包含像< 00350029 0033>这样的字节。长度为6,有没有正确的方法将字节分成数组,如(00,35,00,29,33)?
答案 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];
}