Преобразование NSData в Int, возвращающее значения мусора в iOS - PullRequest
0 голосов
/ 28 октября 2019

Данные:

<5b005c00 5d005e00 5f006000 61006200 63006400>

Выход: 6029403

Приведенная выше длина данных составляет 20 байтов, она должна возвращатьсязначение в диапазоне 0-100

Код, который я использовал:

ppData = [ppData subdataWithRange:NSMakeRange(0, 20)];

int value = *(int*)([ppData bytes]);
NSLog(@"int rec %d",value);

1 Ответ

0 голосов
/ 29 октября 2019

Ваши данные выглядят как 10 16-битных целых чисел: 91, 92, ..., 100;выложены в формате с прямым порядком байтов. MacOS и iOS имеют младший порядок [*], поэтому, чтобы получить первое значение в виде int, измените код на:

int value = *(int16_t *)ppData.bytes;

Сам язык (Objective-) C заботится о преобразованииЗначение int16_t из RHS в значение int (32-разрядное в MacOS / iOS), необходимое для сохранения в value.

HTH

[*] Когда платформа иПорядковый номер данных различается, вам необходимо вызывать соответствующие функции замены байтов, которые обычно предоставляются.

...