Ваш код говорит: unsigned int k
.Так что к не -68, это unsigned
.Это делает ka очень большим числом, основанным на 4-байтовом int , это будет 4294967210. Это, очевидно, намного больше, чем 0, поэтому потребуется некоторое время для цикла for
, чтобы получить этовысокий, хотя в конечном итоге он закончится.
Причина, по которой вы думаете, что это -86, заключается в том, что когда вы распечатываете его с помощью функции, подобной NSLog
, он не имеет прямого знания об передаваемых аргументахопределяет, как обрабатывать аргументы, основываясь на строке формата, предоставленной в качестве первого аргумента.
Вы звоните: Это:
NSLog(@"%d",k);
Это говорит NSLog
трактовать аргумент как signed int (%d)
.Вы должны сделать это:
NSLog(@"%u",k);
Так что NSLog рассматривает аргумент как тип, который он есть: unsigned (%u)
. См. Документацию NSLog.
В существующем состоянии я ожидал, что ваш буфер переполнится, что приведет к перегрузке памяти во время работы цикла и к аварийному завершению работы вашего приложения.
После размышлений я считаю, что @FreeAsInBeer верен, и в этой ситуации вы не хотите выполнять итерацию по циклу for, и вы могли бы исправить это, используя подписанные целые числа.Тем не менее, мне кажется, что вам лучше было бы проверить len > sizeof(MSG_INFO)
и, если это не так, обрабатывать это иначе.В большинстве ситуаций, о которых я могу думать, я не хотел бы выполнять какую-либо обработку после цикла for, если бы мне не удалось прочитать достаточно информации для сообщения ...