lengshizai 2024-02-21 01:33 采纳率: 31.7%
浏览 16
已结题

C++ QT对比内存字符(形式不定)

由于之前的提问最终还是没能解决问题;
再次更换新思路:要求解决方法是QT环境下:
需求如下: 假定地址0x12345678 可用并存储字符串数据 形式固定为汉字字符串 或汉字混杂英文)
请完善思路并加以解释,验证成功可用即采纳。
下面是代码:

//请充分考虑不同编码格式下的实用问题 或给出对应代码修改办法;
BOOL GameFunction::字符串对比(QString 既定字符串,DWORD 内存地址)
{
    //由于字符串的形式待定,所以请转换为通用格式进行对比;
    //路径1:将既定字符串 转换为最基础的格式 如Unicode,以便对比

    QString 解析字符串1 = 函数A(既定字符串);

    //路径2:读取内存地址存储的字符串并简直转变为基础格式  如Unicode等

    QString 目标字符串 = 内存读取函数(内存地址);

    QString 解析字符串2 = 函数B(既定字符串);

    //由于此时 解析字符串1 与解析字符串2 理论上应该具有相同格式, 故可以直接对比

    if(解析字符串1 == 解析字符串2)
    {
        qDebug() << "匹配成功";
        return true;
    }
    else 
    {
        qDebug() << "匹配失败";
        return false;
    }

}
//请遵思路完善下方代码
QString 函数A(QString 参数)
{

}

QString 函数B(QString 参数)
{

}
QString 内存读取函数(DWORD 内存地址)
{

}

  • 写回答

20条回答 默认 最新

  • 波塞冬~ 2024-02-21 08:25
    关注
    
    #include <QString>
    #include <QDebug>
    #include <Windows.h>
    
    class GameFunction {
    public:
        static BOOL 字符串对比(QString 既定字符串, DWORD 内存地址);
        static QString 函数A(const QString& 参数);
        static QString 函数B(const QString& 参数);
        static QString 内存读取函数(DWORD 内存地址);
    };
    
    BOOL GameFunction::字符串对比(QString 既定字符串, DWORD 内存地址)
    {
        // 将既定字符串转换为Unicode格式,以便对比
        QString 解析字符串1 = 函数A(既定字符串);
     
        // 读取内存地址存储的字符串并简直转变为Unicode格式
        QString 目标字符串 = 内存读取函数(内存地址);
     
        // 将读取的字符串转换为Unicode格式
        QString 解析字符串2 = 函数B(目标字符串);
     
        // 对比两个字符串是否相同
        if (解析字符串1 == 解析字符串2)
        {
            qDebug() << "匹配成功";
            return true;
        }
        else 
        {
            qDebug() << "匹配失败";
            return false;
        }
    }
     
    QString GameFunction::函数A(const QString& 参数)
    {
        // 将QString参数转换为Unicode格式
        return 参数.toUtf8(); // 将QString转换为UTF-8格式
    }
     
    QString GameFunction::函数B(const QString& 参数)
    {
        // 将QString参数转换为Unicode格式
       return QString::fromUtf8(参数.toUtf8()); // 将UTF-8格式转换为QString
    }
    
    QString GameFunction::内存读取函数(DWORD 内存地址)
    {
        // 读取内存地址处的字符串数据,假设以Unicode格式存储
        // 这里使用Windows API函数来读取内存中的数据,需要确定数据的编码格式
        // 假设数据是Unicode编码
        QString 内存数据;
        wchar_t *buffer = reinterpret_cast<wchar_t*>(内存地址);
        内存数据 = QString::fromWCharArray(buffer);
        return 内存数据;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(19条)

报告相同问题?

问题事件

  • 系统已结题 3月1日
  • 已采纳回答 2月22日
  • 修改了问题 2月21日
  • 修改了问题 2月21日
  • 展开全部

悬赏问题

  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码
  • ¥15 matlab2017
  • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
  • ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库
  • ¥20 求:怎么实现qt与pcie通信
  • ¥50 前后端数据顺序不一致问题,如何解决?(相关搜索:数据结构)
  • ¥15 基于蒙特卡罗法的中介效应点估计代码
  • ¥15 罗技G293和UE5.3