Побитовое И не работает и запрещает дальнейший доступ к переменной (пока она работает в наблюдателе) - PullRequest
1 голос
/ 19 сентября 2019

В настоящее время я пытаюсь сравнить значение из std::array и шестнадцатеричное значение.Код выглядит следующим образом:

void function(std::array<uint8_t, 64 * 32>& to_render) {
    for (int i = 0; i < 32; i++) {
        for (int j = 0; j < 64; j++) {
            if (to_render[i*64 + j] & 0x80) {
                do_something()...
            }
        }
    }
}

Когда я записываю to_render[i*64 + j] & 0x80 в наблюдатель, я получаю ожидаемый результат (в зависимости от значения to_render[i*64 + j]).

Например, если
to_render[i*64 + j] = 128,
, то
to_render[i*64 + j] & 0x80 == 0x80.

Но когда это делается в коде, оно никогда не работает.Перед тестом, если я посмотрю на значение to_render[i*64 + j], у меня есть значение.Но тогда тест всегда ложен (даже если он должен быть верным), и после этого наблюдатель отображает error reading variable для to_render[i*64 + j].

У вас есть идеи, откуда это может прийти?Я не могу найти проблему самостоятельно.

Приветствия

РЕДАКТИРОВАТЬ:

В исходном коде я добавил этот фрагмент кода:

if (to_render[i*m_size.first + j] != 0x00) {
    std::cout << std::hex << static_cast<int>(to_render[i*m_size.first + j]) << std::dec << " " << static_cast<int>(to_render[i*m_size.first + j]) << std::endl;
}

Чтобы проверить, какое значение.Что странно, так это то, что он всегда печатает 1 для обоих, но это значение в наблюдателе.Я приведу uint8_t к int для отображения (иначе он печатает символы ASCII в консоли).

Если я использую этот фрагмент кода

uint8_t test_value = 0x80;
int result = test_value & 0x80;
if (result) {
    std::cout << "It worked" << std::endl;
}

if (test_value & 0x80) {
    std::cout << "It worked too" << std::endl;
}

Он работает как задумано.Я попробовал его, заменив uint8_t test_value = to_render[0], и он тоже работает.

...