不確定的哪些字節要,這裏被提取的範圍內的數據「40 00 00 00」之間,以「34」的第一次出現,並與該範圍中刪除的數據:
const NSUInteger dataLength = 130;
unsigned char dataBytes[dataLength] = {
0x01,0x00,0x00,0x04,0x40,0x00,0x00,0x00,0x00,0x41,0x41,0x41,0x41,0x48,0x47,0x5A,
0x30,0x65,0x58,0x42,0x4E,0x4E,0x45,0x45,0x67,0x41,0x41,0x41,0x41,0x41,0x45,0x30,
0x30,0x51,0x53,0x42,0x74,0x63,0x44,0x51,0x79,0x61,0x58,0x4E,0x76,0x62,0x51,0x41,
0x41,0x41,0x2B,0x39,0x74,0x62,0x32,0x39,0x32,0x41,0x41,0x41,0x41,0x62,0x47,0x31,
0x32,0x61,0x47,0x51,0x41,0x41,0x41,0x41,0x41,0x71,0x67,0x59,0x35,0x79,0x36,0x6F,
0x47,0x4F,0x63,0x73,0x41,0x41,0x4B,0x78,0x45,0x41,0x41,0x43,0x34,0x41,0x41,0x41,
0x42,0x41,0x41,0x41,0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
0x41,0x41,0x41,0x41,0x41,0x41,0x51,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
0x41,0x41};
NSData *data = [NSData dataWithBytes:dataBytes length:130];
const NSUInteger startBytesLength = 4;
unsigned char startBytes[startBytesLength] = {0x40, 0x00, 0x00, 0x00};
const NSUInteger stopBytesLength = 1;
unsigned char stopBytes[stopBytesLength] = {0x34};
NSData *startData = [NSData dataWithBytes:startBytes length:startBytesLength];
NSData *stopData = [NSData dataWithBytes:stopBytes length:stopBytesLength];
NSRange startRange = [data rangeOfData:startData options:0 range:NSMakeRange(0, dataLength)];
NSUInteger start = startRange.location;
NSRange stopRange = [data rangeOfData:stopData options:0 range:NSMakeRange(start+startBytesLength, dataLength-(start+startBytesLength))];
NSUInteger length = stopRange.location - start;
NSUInteger stopLocation = stopRange.location+stopBytesLength;
NSData *extractData = [data subdataWithRange:NSMakeRange(start, length)];
NSLog(@"extractData: %@", extractData);
NSMutableData *newData = [NSMutableData data];
[newData appendData:[data subdataWithRange:NSMakeRange(0, start)]];
[newData appendData:[data subdataWithRange:NSMakeRange(stopLocation, dataLength-stopLocation)]];
NSLog(@"newData: %@", newData);
的NSLog輸出:
ExtractData由:< 00414141 4148475a 3065 5842 4e4e4545 67414141 41414530 30515342 74634451 7961584e 76625141 41412b39 74623239 32414141 41624731 32614751 41414141 41716759 3579366f 474f6373 41414b78 45414143>
newData: 41414141 41514141 41414141 41414141 41>
第一輸出是我需要的('extractData')。它精確地提取了我需要的內容,但是在函數的末尾崩潰(對象0xbfffd6cf的malloc:***錯誤:釋放的指針未分配)。你知道它是什麼嗎? – Marc 2012-01-16 09:04:32
在'startData'和'stopData'聲明中加入'freeWhenDone:NO'解決了這個問題。 – Marc 2012-01-17 18:27:47
糟糕,我不應該使用NoCopy版本,它需要使用malloc分配字符數組。固定。 – zaph 2012-01-17 23:37:39