Тип данных char
имеет неопределенную подпись, и, похоже, ваш компилятор (gcc или clang?) Решил, что он должен быть подписан.Поэтому, когда вы приводите char
к большему типу, используется расширение знака, которое заполняет дополнительные биты тем же значением, которое имеет старший значащий бит.Для байтов со значением, большим 0x7F
, устанавливается старший значащий бит, поэтому он прерывает увеличение.
Требуется нулевое расширение, которое обнуляет дополнительные биты.Вы можете получить его, используя тип unsigned char
.
Это должно сделать это:
unsigned char *data = (unsigned char *)[Data bytes];
Кстати, -[NSData bytes]
возвращает указатель const
.Вы должны соблюдать это и пометить указатель как const
тоже:
const unsigned char *data = (const unsigned char *)[Data bytes];