C: Найти вхождения байтов в области памяти - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь написать функцию, которая использует только основанную на указателе логику для поиска в области памяти (baseAddr) определенного байта (байта), подсчитывает вхождения и сохраняет смещения в массиве (смещения).Вот что у меня есть:

uint8_t findBytes( uint16_t* const Offsets, const uint8_t* const baseAddr,
                                            uint32_t length, uint8_t Byte) {
    uint8_t bytesRead = 0;
    int count = 0;
    while (bytesRead < length) {
        if ((baseAddr + bytesRead) == Byte) {
            *(Offsets + count) = bytesRead;
            count++;
        }
        bytesRead++;
    }

    return count;
}

По какой-то причине я всегда зацикливаюсь на бесконечном цикле, если использую (bytesRead

1 Ответ

0 голосов
/ 11 октября 2018

bytesRead - это uint8_t, максимальное значение которого равно 255. Если у вас есть uint32_t length, ваше смещение должно быть того же типа данных.И поскольку потенциально каждый байт может быть совпадением, ваш счетчик (возвращаемое значение) также должен быть того же типа, что и массив смещений.

Больше проблем:

if ((baseAddr + bytesRead) == Byte)

You 'Вы не разыменовываете указатель здесь, вы только проверяете его значение.Ваш компилятор должен выдавать предупреждение о несоответствии типов.

Попробуйте:

if (*(baseAddr + bytesRead) == Byte)

Наконец, вам нужно убедиться, что offsets указывает на достаточное количество памяти.Опять же, потенциально * каждый байт может совпадать, что означает, что offsets должен иметь ту же длину (в элементах), что и входные данные.

...