patterns: Fix bitfields with unaligned sizes

Correction for #292
This commit is contained in:
WerWolv
2021-09-12 14:28:13 +02:00
parent 987840e480
commit 132fc181cd
2 changed files with 19 additions and 26 deletions

View File

@@ -1244,14 +1244,6 @@ namespace hex::pl {
return new PatternDataBitfieldField(*this);
}
template<typename T>
T extractValue(const std::vector<u8> &value) {
T fieldValue = 0;
std::memcpy(&fieldValue, value.data(), value.size());
return hex::extract(this->m_bitOffset + (this->m_bitSize - 1), this->m_bitOffset, fieldValue);
}
void createEntry(prv::Provider* &provider) override {
std::vector<u8> value(this->getParent()->getSize(), 0);
provider->read(this->getParent()->getOffset(), &value[0], value.size());
@@ -1281,24 +1273,7 @@ namespace hex::pl {
{
u8 numBytes = (this->m_bitSize / 8) + 1;
u64 extractedValue;
switch (this->getSize()) {
case 1:
extractedValue = extractValue<u8>(value);
break;
case 2:
extractedValue = extractValue<u16>(value);
break;
case 4:
extractedValue = extractValue<u32>(value);
break;
case 8:
extractedValue = extractValue<u64>(value);
break;
default:
extractedValue = 0;
}
u64 extractedValue = hex::extract(this->m_bitOffset + (this->m_bitSize - 1), this->m_bitOffset, value);
ImGui::Text("%llu (0x%llX)", extractedValue, extractedValue);
}