Проблема заключается в несоответствии размера символа двоичному размеру.Когда вы вызываете [NSString length]
, вы получаете количество логических символов в строке, а не количество байтов, необходимое для его сохранения в произвольной кодировке.Символ fl является одним логическим символом для класса NSString
, но его кодировка UTF-8 равна ef ac 82
: он занимает 3 байта.
Ваш вызов [NSData dataWithBytes:length:]
получает указатель на эти 3 байта, но затем [inflatedString01 length]
говорит, что это только один символ, и вы передаете это как число байтов;вот почему ваши данные содержат только ef
.
strlen
, не учитывая кодировку, будут просто считать количество байтов в строке C до тех пор, пока не найдет ноль, поэтому он точно вернетколичество байтов в строке UTF-8 (как вы отметили в своем комментарии).
Лучшим решением, вероятно, было бы просто позвонить [inflatedString01 dataUsingEncoding:NSUTF8StringEncoding]
, чтобы получить байты.