1. 程式人生 > 其它 >qt 二進位制檔案轉換工具

qt 二進位制檔案轉換工具

qt二進位制檔案轉化工具,注意點:寫檔案時候,對於非可顯示字元,在qt5.9.3版本測試下,需要一個一個字元的寫入,不然程式崩潰.

#include "mainwindow.h"
#include "ui_mainwindow.h"

#define VERSION "( V1.0.0)"

#include <QFile>
#include <QFileInfo>
#include <QFileDialog>
#include <QDateTime>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(
new Ui::MainWindow) { ui->setupUi(this); setWindowTitle(QStringLiteral("二進位制檔案檢視轉換工具")+VERSION); connect(ui->btn_readHex,&QPushButton::clicked,this,[=](){ QString fileName = QFileDialog::getOpenFileName(this,QStringLiteral("資料讀取"),".",tr("Exel file(*.txt *.hex *.bin)"
)); if(fileName.length()<=0) { return ; } ui->data->clear(); QFile file(fileName); bool isOK = file.open(QIODevice::ReadOnly); if(isOK == true){ QByteArray array = file.readAll(); QString strres = ""; for(int i=0;i<array.length();i++){ strres
+=QString("00"+QString::number(array.at(i),16)).right(2); } ui->data->appendPlainText(strres); } file.close(); }); connect(ui->btn_readTXT,&QPushButton::clicked,this,[=](){ QString fileName = QFileDialog::getOpenFileName(this,QStringLiteral("資料讀取"),".",tr("Exel file(*.txt *.hex *.bin)")); if(fileName.length()<=0) { return ; } ui->data->clear(); QFile file(fileName); bool isOK = file.open(QIODevice::ReadOnly); if(isOK == true){ QByteArray array = file.readAll(); ui->data->appendPlainText(QString(array)); } file.close(); }); connect(ui->btn_saveTXT,&QPushButton::clicked,this,[=](){ QString name =QDateTime::currentDateTime().toString("yyyy_MM_dd__HH_mm_ss")+".txt"; QString fileName = QFileDialog::getSaveFileName(this,QStringLiteral("資料儲存"),name,tr("Exel file(*.txt *.hex *.bin)")); if(fileName.length()<=0) { return ; } //建立檔案物件 QFile file; //關聯檔名字 file.setFileName(fileName); //開啟檔案,只寫方式 if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QFile::Truncate)){ }//清空 file.close(); bool isOK = file.open(QIODevice::WriteOnly); if (isOK == true){ QString str = ui->data->toPlainText(); file.write(str.toStdString().data()); } file.close(); }); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_btn_saveHex_clicked() { QString name =QDateTime::currentDateTime().toString("yyyy_MM_dd__HH_mm_ss")+".hex"; QString fileName = QFileDialog::getSaveFileName(this,QStringLiteral("資料儲存"),name,tr("Exel file(*.txt *.hex *.bin)")); if(fileName.length()<=0) { return ; } //建立檔案物件 QFile file; //關聯檔名字 file.setFileName(fileName); //開啟檔案,只寫方式 if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QFile::Truncate)){ }//清空 file.close(); bool isOK = file.open(QIODevice::Append); QString str = ui->data->toPlainText(); for(int i=0;i<str.length()/2;i++){ unsigned char __d = str.mid(2*i,2).toInt(nullptr,16); file.write((char*)&__d,1); } file.close(); }

//

注意,在lambda表示式中,debug斷點臨時變數不會顯示出來,得放置在一個函式中,才會正常顯示

//