This commit is contained in:
codeboss 2025-07-16 00:24:48 +08:00
parent 7b4ecfb9ea
commit e17fc39dc7
2 changed files with 88 additions and 8 deletions

View File

@ -1,7 +1,7 @@
#include "TranslateBasic.h"
AbstractExtractor::AbstractExtractor(const QString& name)
:_name_store(name), _byte_offset(0), _byte_count(0) {
AbstractExtractor::AbstractExtractor(const QString& name, DataType data)
:_name_store(name), _type_store(data), _byte_offset(0), _byte_count(0) {
}
bool AbstractExtractor::setOffsetFromPrevious(int bytes)
@ -21,6 +21,11 @@ QString AbstractExtractor::name() const
return _name_store;
}
DataType AbstractExtractor::outType() const
{
return _type_store;
}
int AbstractExtractor::offsetFromPrevious() const
{
return _byte_offset;
@ -44,7 +49,7 @@ void AbstractExtractor::saveTo(QJsonObject& obj) const
}
BytesAsHex::BytesAsHex()
: AbstractExtractor(NAME(BytesAsHex)) {
: AbstractExtractor(NAME(BytesAsHex), DataType::ValueSequenceString) {
}
QVariant BytesAsHex::parse(const QByteArray& bytes) const
@ -62,7 +67,7 @@ std::shared_ptr<Serializable> BytesAsHex::newDefault() const
}
BytesAsBitCombine::BytesAsBitCombine()
: AbstractExtractor(NAME(BytesAsBitCombine))
: AbstractExtractor(NAME(BytesAsBitCombine), DataType::TextString)
{
}
@ -151,7 +156,7 @@ std::shared_ptr<Serializable> BytesAsInteger::newDefault() const
}
BytesAsInteger::BytesAsInteger()
:AbstractExtractor(NAME(BytesAsInteger)) {
:AbstractExtractor(NAME(BytesAsInteger), DataType::Int64) {
setCountWithinParse(8);
}
@ -208,7 +213,7 @@ QVariant BytesAsInteger::parse(const QByteArray& bytes) const
#include <QTextCodec>
BytesAsString::BytesAsString()
:AbstractExtractor(NAME(BytesAsString)) {
:AbstractExtractor(NAME(BytesAsString), DataType::TextString) {
_conv_with = QTextCodec::codecForName("GBK");
}
@ -248,3 +253,42 @@ std::shared_ptr<Serializable> BytesAsString::newDefault() const
{
return std::make_shared<BytesAsString>();
}
AbstractValueConvert::AbstractValueConvert(const QString& nm, DataType in, DataType out)
: _name_store(nm), _in_type(in), _out_type(out) {
}
QString AbstractValueConvert::name() const
{
return _name_store;
}
DataType AbstractValueConvert::inType() const
{
return _in_type;
}
DataType AbstractValueConvert::outType() const
{
return _out_type;
}
void AbstractValueConvert::loadFrom(const QJsonObject& obj)
{
auto int_in_type = (int)_in_type;
INT32_PEAK(int_in_type);
_in_type = (DataType) int_in_type;
auto int_out_type = (int)_out_type;
INT32_PEAK(int_out_type);
_out_type = (DataType) int_out_type;
}
void AbstractValueConvert::saveTo(QJsonObject& obj) const
{
auto int_in_type = (int)_in_type;
INT32_SAVE(int_in_type);
auto int_out_type = (int)_out_type;
INT32_SAVE(int_out_type);
}

View File

@ -31,7 +31,7 @@ public:
/// 内部使用的数据类型
/// </summary>
enum class DataType {
ValueString,
ValueSequenceString,
TextString,
Int64,
Flt32,
@ -51,6 +51,12 @@ public:
/// <returns></returns>
virtual QString name() const = 0;
/// <summary>
///
/// </summary>
/// <returns></returns>
virtual DataType outType() const = 0;
/// <summary>
/// 从上一个单元字节偏移字节数量
/// </summary>
@ -73,10 +79,11 @@ public:
class AbstractExtractor : public ExtractUnit {
private:
QString _name_store;
DataType _type_store;
int _byte_offset, _byte_count;
public:
AbstractExtractor(const QString& name);
AbstractExtractor(const QString& name, DataType data);
/// <summary>
/// 设置偏移字节数量
/// </summary>
@ -90,6 +97,7 @@ public:
// ExtractUnit ===========================
QString name() const override;
virtual DataType outType() const;
int offsetFromPrevious() const override;
int countWithinParse() const override;
@ -186,3 +194,31 @@ public:
std::shared_ptr<Serializable> newDefault() const override;
};
/// <summary>
/// Êýֵת»»³éÏó½Ó¿Ú
/// </summary>
class ValueConvert : public Serializable {
public:
virtual ~ValueConvert() = default;
virtual QString name() const = 0;
virtual DataType inType() const = 0;
virtual DataType outType() const = 0;
virtual QVariant convert(const QVariant &value) const = 0;
};
class AbstractValueConvert : public ValueConvert {
private:
QString _name_store;
DataType _in_type, _out_type;
public:
AbstractValueConvert(const QString &nm, DataType in, DataType out);
QString name() const override;
DataType inType() const override;
DataType outType() const override;
void loadFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};