Зачем получать частичный диапазон данных при сбоях subdataWithRange? - PullRequest
0 голосов
/ 23 января 2012

У меня есть этот код:

 NSMutableData *derivedKey = [NSMutableData dataWithLength:32];

 // code missing..fill somehow the derivedKey with 32 random bytes

 // This line doesn't crash
 NSData *iv = [derivedKey subdataWithRange:NSMakeRange(0, 32)];

..

// This line crashes 
 NSData *iv = [derivedKey subdataWithRange:NSMakeRange(16, 32)];

Любое предложение, почему это происходит? Кажется, что как-то только весь диапазон от 0 до 32 проходов Я хочу просто новую переменную NSData, которая содержит только вторую половину байтов

1 Ответ

10 голосов
/ 23 января 2012

Сбой, потому что вторым параметром NSRangeMake является длина диапазона.Итак, что вы пытаетесь сделать, это взять 32 байта, начиная со смещения 16, которое превышает размер данных (последний байт будет по порядку 48).

Итак, просто измените его на:

NSData *iv = [derivedKey subdataWithRange:NSMakeRange(16, 16)];

Проверьте ref: http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSMakeRange

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...