Qt 對(duì)bin,Hex文件的讀寫(xiě)

Qt 對(duì)bin奔则,Hex文件的讀寫(xiě)

? 項(xiàng)目需要將bin文件和Hex文件合并到一個(gè)并一個(gè)bin文件中,并保留Hex的原始信息蔽午。因?yàn)閮蓧KMCU使用不同的文件進(jìn)行升級(jí)易茬,并且是主MCU給副MCU升級(jí),主MCU通過(guò)OTA獲取更新文件及老。

  1. 目標(biāo)文件的選擇

    為了獲取文件的路徑抽莱,為后續(xù)文件的讀寫(xiě)做準(zhǔn)備。

    include <QFileDialog>

     QString fileName = QFileDialog::getOpenFileName(
                            this,
                            tr("Select KW35 Bin file"),
                            "./",
                            tr("bin file(*.bin)"));
    if(fileName.isEmpty()){
        QMessageBox mesg;
        mesg.critical(this,tr("Error"),tr("打開(kāi)Bin文件發(fā)生錯(cuò)誤骄恶!"));
        return;
    }else{
        //qDebug()<< "path :" << fileName;
        ui->lineEdit_BinPath->setText(fileName);
    }
    QFileInfo *fileInfo = new QFileInfo(fileName);
    mFileInfo.BinFileInfo = *fileInfo;
    ui->label_KW35BinSize->setText("KW35 Bin Size:" + QString::number(mFileInfo.BinFileInfo.size()));
    

    QFileDialog::getOpenFileName會(huì)打開(kāi)一個(gè)對(duì)話(huà)框食铐,用于選擇文件

    1. arg1:父對(duì)象

    2. arg2:窗口標(biāo)題

    3. arg3:‘’./‘表示打開(kāi)當(dāng)前程序運(yùn)行的路徑;‘’/‘’表示當(dāng)前程序路徑的根目錄

    4. arg4:選擇的文件類(lèi)型

    fileName獲取的是用戶(hù)選擇的文件的路徑僧鲁,未選中任何文件虐呻,則為空。

    QMessageBox用于輸出各類(lèi)提示信息寞秃,提示框使用請(qǐng)自行百度铃慷。

    使用路徑初始化QFileInfo對(duì)象可以獲取文件的各類(lèi)信息。

  2. bin文件的讀取

QFile *file = new QFile;
/*
* 讀取Bin文件
*/
file->setFileName(mFileInfo.BinFileInfo.filePath());
if(file->open(QIODevice::ReadOnly)){
    QDataStream BinFileData(file);
    char *pBuff = new char[mFileInfo.BinFileInfo.size()];
    BinFileData.readRawData(pBuff,static_cast<int>(mFileInfo.BinFileInfo.size()));
    mFileInfo.BinFileRawData = QByteArray(pBuff,static_cast<int>(mFileInfo.BinFileInfo.size()));

    //qDebug()<< mFileInfo.BinFileRawData;
    file->close();
}else {
    QMessageBox mesg;
    mesg.critical(this,tr("Error"),tr("無(wú)法讀取,請(qǐng)檢查BIN文件路徑!"));
    return;
}

  1. hex文件的讀取
/*
 * 讀取hex文件
 */
file->setFileName(mFileInfo.HexFileInfo.filePath());

if(file->open(QIODevice::ReadOnly)){
    QTextStream HexFileData(file);
    mFileInfo.HexFileRawData = HexFileData.readAll().toLocal8Bit();
    //qDebug()<< mFileInfo.HexFileRawData;
    file->close();
}else{
    QMessageBox mesg;
    mesg.critical(this,tr("Error"),tr("無(wú)法讀取,請(qǐng)檢查Hex文件路徑!"));
    return;
}

可以看出對(duì)Bin文件和Hex文件的讀取使用不同的方式蜕该;bin文件中的儲(chǔ)存的是數(shù)據(jù),有些值是不能被顯示的洲鸠,如果使用QTextStream讀取堂淡,對(duì)于某些不可見(jiàn)字符,就會(huì)被忽略扒腕,造成讀取到的bin文件數(shù)據(jù)丟失绢淀。

  1. 文件的寫(xiě)入

    獲取到文件的數(shù)據(jù),將兩個(gè)文件都放入一個(gè)緩沖區(qū)瘾腰,在寫(xiě)入一個(gè)新的文件中即可皆的。

QFile newFile(mFileInfo.outputPath
              + "\\"                                        //注:雙斜杠
              + mFileInfo.BinFileInfo.baseName()            //去除后綴
              + "_"
              + mFileInfo.HexFileInfo.baseName()
              + ".bin");
newFile.open(QIODevice::ReadWrite);                       //創(chuàng)建新文件
newFile.write(buffPack);                                //buffPack保存了合并文件的數(shù)據(jù)
qDebug() << "文件寫(xiě)入完成";
newFile.close();

在保存為文件之前,可以任意修改文件的數(shù)據(jù)蹋盆,比如需要修改指定位置的數(shù)據(jù)费薄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市栖雾,隨后出現(xiàn)的幾起案子楞抡,更是在濱河造成了極大的恐慌,老刑警劉巖析藕,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件召廷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)竞慢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)先紫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人筹煮,你說(shuō)我怎么就攤上這事遮精。” “怎么了寺谤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵仑鸥,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我变屁,道長(zhǎng)眼俊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任粟关,我火速辦了婚禮疮胖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘闷板。我一直安慰自己澎灸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布遮晚。 她就那樣靜靜地躺著性昭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪县遣。 梳的紋絲不亂的頭發(fā)上糜颠,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音萧求,去河邊找鬼其兴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛夸政,可吹牛的內(nèi)容都是我干的元旬。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼守问,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼匀归!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起耗帕,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤朋譬,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后兴垦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體徙赢,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡字柠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狡赐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窑业。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖枕屉,靈堂內(nèi)的尸體忽然破棺而出常柄,到底是詐尸還是另有隱情,我是刑警寧澤搀擂,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布西潘,位于F島的核電站,受9級(jí)特大地震影響哨颂,放射性物質(zhì)發(fā)生泄漏喷市。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一威恼、第九天 我趴在偏房一處隱蔽的房頂上張望品姓。 院中可真熱鬧,春花似錦箫措、人聲如沸腹备。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)植酥。三九已至,卻和暖如春弦牡,著一層夾襖步出監(jiān)牢的瞬間惧互,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工喇伯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拨与。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓稻据,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親买喧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捻悯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 1.創(chuàng)建文件夾 !/bin/sh mkdir -m 777 "%%1" 2.創(chuàng)建文件 !/bin/sh touch...
    BigJeffWang閱讀 10,029評(píng)論 3 53
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,725評(píng)論 0 10
  • [轉(zhuǎn)]C/C++ 文件讀寫(xiě)操作總結(jié) 在編程的過(guò)程中淤毛,文件的操作是一個(gè)經(jīng)常用到的問(wèn)題今缚,在C++Builder中,可以...
    天之道天知道閱讀 5,195評(píng)論 0 7
  • cat cdchmod chowncp cut名稱(chēng):cat使用權(quán)限:所有使用者使用方式:cat [-AbeEnst...
    Creator93閱讀 353評(píng)論 0 0
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線(xiàn)程低淡,因...
    小菜c閱讀 6,367評(píng)論 0 17