unpad NSData от дешифрования на ios - PullRequest
0 голосов
/ 28 марта 2012

Я расшифровываю строку с помощью IOS, но вывод HEX является битовым логером, а не реальной строкой, в конце которой есть еще 00, что создает проблему при использовании NSData.

возможно удалитьчто 00 сгенерировано?

после того, как я увидел шестнадцатеричный код, мои данные попытались удалить их вручную, и кажется, что он работает с

[dirtyData setLength:[dirtyData length] - 3]

, но не знаю, как программно считать, сколько 00 есть до конца

Я верю, что мне нужно что-то вроде этой функции PHP, но совместимо с NSData hex

function unpad($text){
       $pad = ord($text{strlen($text)-1});
       if ($pad > strlen($text)) return false;
       if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;

       return substr($text, 0, -1 * $pad);
   }

1 Ответ

0 голосов
/ 28 марта 2012

Если вы где-то сохранили длину незаполненных данных (в вашем примере 3), тогда вы можете использовать:

NSUInteger unpaddedLen = [dirtyData length] - 3;
NSRange unpaddedRange = NSMakeRange(0, unpaddedLen);
NSData* unpaddedData = [dirtyData subdataWithRange:unpaddedRange];

Примечание: NSData не меняется, поэтому ваш setLength не работает. Другой способ - использовать NSMutableData:

NSMutableData* dirtyData;
// fill dirtyData as just it would be NSData
[dirtyData setLength:[dirtyData length] - 3]; // will now work
...