我试图从NSData获取16个字节的NSMutableArray,但是没有这样做。也许任何人都可以指出我正确的方向。
实施例:
输入:<c4ebc39d edf81fe6 09e0a41a 34b4d20d c4ebc39d edf81fe6 09e0a41a 34b4d20d>
输出:<c4ebc39d edf81fe6 09e0a41a 34b4d20d> <c4ebc39d edf81fe6 09e0a41a 34b4d20d>
我这样想:
NSMutableArray *blocks = [[NSMutableArray alloc]init];
for (NSUInteger i = 0; i <= [data length]; i=i+16) {
unsigned char *byte = NULL;
[data getBytes:byte range:NSMakeRange(i, 16)];
NSData *temp = [[NSData alloc] initWithBytes:byte length:sizeof(byte)];
[blocks addObject:temp];
}
出于某种原因,这会让我感到兴奋。
答案 0 :(得分:5)
[data getBytes:byte range:NSMakeRange(i, 16)];
将数据复制到byte
指向的内存中,它不分配内存。复制数据崩溃是因为byte == NULL
未指向有效内存。替换
unsigned char *byte = NULL;
通过
unsigned char byte[16];
应该解决问题。但请注意
NSData *temp = [data subdataWithRange:NSMakeRange(i, 16)];
更容易,根本不需要字节缓冲区。
还要注意for循环
for (NSUInteger i = 0; i <= [data length]; i=i+16)
应改为
for (NSUInteger i = 0; i <= [data length] - 16; i=i+16)
避免访问超出其范围的data
对象。
你的循环看起来像这样:
for (NSUInteger i = 0; i <= [data length] - 16; i = i + 16) {
NSData *temp = [data subdataWithRange:NSMakeRange(i, 16)];
[blocks addObject:temp];
}