В настоящее время я пытаюсь сравнить значение из 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]
, и он тоже работает.