mirror of
https://github.com/hasherezade/bearparser
synced 2026-06-08 14:32:38 +00:00
60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
#include "WrappedValue.h"
|
|
|
|
QVariant WrappedValue::getQVariant()
|
|
{
|
|
if (m_Type == INT) {
|
|
bool isOk = false;
|
|
|
|
qlonglong num = (qlonglong) m_Owner->getNumValue(m_Offset, m_Size, &isOk);
|
|
if (!isOk) return QVariant("INVALID");
|
|
return QVariant(num);
|
|
}
|
|
if (m_Type == STRING) {
|
|
char *strPtr = (char*) this->m_Owner->getContentAt(m_Offset, m_Size);
|
|
if (strPtr == NULL) return QVariant();
|
|
return QString(strPtr);
|
|
}
|
|
if (this->m_Type == WSTRING) {
|
|
|
|
bufsize_t wSize = m_Size / bufsize_t(sizeof(WORD));
|
|
WORD *strPtr = (WORD*) this->m_Owner->getContentAt(m_Offset, m_Size);
|
|
return QString::fromUtf16(reinterpret_cast<const char16_t*>(strPtr), static_cast<int>(wSize));
|
|
}
|
|
return QVariant("...");
|
|
}
|
|
|
|
QString WrappedValue::getIntFormat()
|
|
{
|
|
QString format = "%0" + QString::number(m_Size * 2) +"llX";
|
|
return format;
|
|
}
|
|
|
|
QString WrappedValue::toQString()
|
|
{
|
|
if (this->m_Type == NONE) return "";
|
|
if (this->m_Type == COMPLEX) return "...";
|
|
|
|
QVariant val = getQVariant();
|
|
|
|
if (this->m_Type == STRING || this->m_Type == WSTRING) {
|
|
return val.toString();
|
|
}
|
|
if (this->m_Type == INT) {
|
|
|
|
bufsize_t size = this->m_Size;
|
|
if (size > sizeof(uint64_t)) return "...";
|
|
|
|
bool isOk = false;
|
|
uint64_t num = m_Owner->getNumValue(m_Offset, m_Size, &isOk);
|
|
if (!isOk) return "INVALID";
|
|
QString out;
|
|
#if QT_VERSION >= 0x050000
|
|
out = QString::asprintf(getIntFormat().toStdString().c_str(), num);
|
|
#else
|
|
out.sprintf(getIntFormat().toStdString().c_str(), num);
|
|
#endif
|
|
return out;
|
|
}
|
|
return getQVariant().toString();
|
|
}
|