Я пытаюсь исправить код C ++ с помощью дезинфицирующего устройства.
Код говорит:
unsigned result = *(uint32_t*)data;
И дезинфицирующее средство дает:
runtime error: load of misaligned address 0x6280033f410a for type 'uint32_t', which requires 4 byte alignment
Как мне это исправить?
load of misaligned address 0x6280033f410a for type 'uint32_t' ...
Как мне это исправить?
Вам необходимо создать выровненный объект (например, переменную) и скопировать содержимое с неверно выровненного адреса:
std::uint32_t u32;
std::memcpy(&u32, data, sizeof u32);
Это предполагает, что вы собираетесь читать sizeof u32
байты с этого адреса и что эти байты упорядочены в родном порядке байтов.
как правильно привести uint32_t к неподписанному
Неявное преобразование должно быть просто отлично:
unsigned result = u32;
Других решений пока нет …