Я хочу выяснить, почему функция может работать, несмотря на доступ за пределами буфера, и есть ли основные причины для такого последовательного вывода.
Например, если буфер содержит только одно значение (например, 1), а pos также равно 1, функция правильно возвращает 0.
Однако, когда значение буфера равно 8, вычисление приводит к pos / 8 = 1, что обеспечивает доступ ко второму элементу массива (который не существует). Во время отладки я всегда вижу в этой позиции значение 204. В результате выражение buffer[pos / 8] >> (8 - pos % 8) & 0x01 возвращает 0.
С другой стороны, когда значение буфера равно 9, то же выражение возвращает 1.
Код: Выделить всё
#include
#include
int32_t getBitByPos(unsigned char* buffer, int32_t pos)
{
int test1 = buffer[pos / 8];
int test2 = buffer[pos / 8] >> (8 - pos % 8) & 0x01;
return (buffer[pos / 8] >> (8 - pos % 8) & 0x01);
}
Могу ли я рассчитывать на то, что эта функция предоставит правильные результаты?

Подробнее здесь: https://stackoverflow.com/questions/790 ... fer-access