《VS+QT》dat文件与txt文件相互转换

##工作记录##

工作中常用到dat文件与txt文件格式相互转换,这里总结转换函数如下:

*.dat文件转*txt文件

本函数中使用的*.dat文件每行256字节十六进制数据。

void GenTxtFromDat(QString datFilePath, QString txtFilePath)

{

    QFile file(datFilePath);

    QFile newFile(txtFilePath);

    QTextStream newFileSR(&newFile);

    if (!(file.open(QIODevice::ReadOnly)))

        return;

    if (!newFile.open(QFile::ReadWrite | QIODevice::Truncate))

    {

        return;

    }

    QByteArray byteBuf = file.readAll();

    qint64 fileLen = file.size();

    int lineLength = 256;

    QString str;

    for (int i = 0; i < fileLen / lineLength; i++)

    {

        for (int j = 0; j < lineLength; j++)

        {

            unsigned char temp = byteBuf[i*lineLength + j];

            QString hexStr = QString("%1").arg(temp, 2, 16, QLatin1Char('0'));

            str += hexStr.toUpper();

            str += " ";

        }

        newFileSR << str << endl;

        str = "";

    }

    newFile.close();

}

*.txt文件转*dat文件

本函数中使用的*.txt文件每行256字节十六进制数据。

void GenDatFromTxt(QString txtFilePath, QString datFilePath)

{

        QFile file(txtFilePath);

        QFile newFile(datFilePath);

        if (!(file.open(QIODevice::ReadOnly)))

            return;

        if (!newFile.open(QFile::ReadWrite | QIODevice::Truncate))

        {

            return;

        }

        QByteArray byteBuf = file.readAll();

        qint64 fileLen = file.size();

        QByteArray removeEnterBuf;

        //去掉回车键和空格

        for (int i = 0; i < fileLen; i++)

        {

            if (byteBuf.at(i) == ' ' || byteBuf.at(i) == '\r' || byteBuf.at(i) == '\n')

            {

                continue;

            }

            else

            {

                removeEnterBuf.append(byteBuf[i]);

            }

        }

        QString str;

        QList<unsigned char> dataList; //存放将2进制转换为十六进制的全部数据

        for (int i = 0; i < removeEnterBuf.size(); i++)

        {

            str += removeEnterBuf[i];

            bool ok;

            if ((i + 1) % 2 == 0) //每两个字符为十六进制一个字节

            {

                dataList.append(str.toInt(&ok, 16));

                str = "";

            }

        }

        QByteArray writeBytes;

        for (int i = 0; i < dataList.size(); i++)

        {

            writeBytes.append(dataList[i]);

        }

        newFile.write(writeBytes);

        newFile.close();

}

说明:如果有需要,也可以将每行的数据长度作为一个参数传入,使函数通用性更好。

相关推荐

  1. 《VS+QT》dat文件txt文件相互转换

    2024-05-14 06:42:02       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-14 06:42:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-14 06:42:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-14 06:42:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-14 06:42:02       20 阅读

热门阅读

  1. docker部署调度程序

    2024-05-14 06:42:02       11 阅读
  2. http和https的区别

    2024-05-14 06:42:02       9 阅读
  3. 2024/5/13 SpringBoot配置多个RabbitMQ

    2024-05-14 06:42:02       8 阅读
  4. ceph纠删码精简配置ec4+2:1与ec4+2的切换

    2024-05-14 06:42:02       9 阅读
  5. 每天一个数据分析题(三百二十一)波士顿矩阵

    2024-05-14 06:42:02       11 阅读