利用QT将一个文件读取且以16进制形式输出

核心代码。

#include 
#include 
#include 

QString qstring2hex(char *pbuf,qint64 len)
{
    qint64 i;
    QString str1;
    uint8_t temp_buf[1024];

    if (len>1024)return NULL;

    for (i=0; i<len; i++)
    {
     temp_buf[i] = pbuf[i];
    }


    switch(len)
    {
    case 0x00:
        return NULL;
    case 0x01:
        str1.sprintf("0x%02x,",temp_buf[0]);
        break;
    case 0x02:
        str1.sprintf("0x%02x,0x%02x,",temp_buf[0],temp_buf[1]);
        break;
    case 0x03:
        str1.sprintf("0x%02x,0x%02x,0x%02x,",\
                     temp_buf[0],temp_buf[1],temp_buf[2]);
        break;
    case 0x04:
        str1.sprintf("0x%02x,0x%02x,0x%02x,0x%02x,",\
                     temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3]);
        break;
    case 0x05:
        str1.sprintf("0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,",\
                     temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],temp_buf[4]);
        break;
    case 0x06:
        str1.sprintf("0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,",\
                     temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],temp_buf[4],temp_buf[5]);
        break;
    case 0x07:
        str1.sprintf("0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,",\
                     temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],\
                temp_buf[4],temp_buf[5],temp_buf[6]);
        break;
    case 0x08:
        str1.sprintf("0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,",\
                     temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],\
                temp_buf[4],temp_buf[5],temp_buf[6],temp_buf[7]);
        break;
    case 0x09:
        str1.sprintf("0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,",\
                     temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],\
                temp_buf[4],temp_buf[5],temp_buf[6],temp_buf[7],\
                temp_buf[8]);
        break;
    case 10:
        str1.sprintf("0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,",\
                     temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],\
                temp_buf[4],temp_buf[5],temp_buf[6],temp_buf[7],\
                temp_buf[8],temp_buf[9]);
        break;
    case 11:
        str1.sprintf("0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,",\
                     temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],\
                temp_buf[4],temp_buf[5],temp_buf[6],temp_buf[7],\
                temp_buf[8],temp_buf[9],temp_buf[10]);
        break;
    case 12:
        str1.sprintf("0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,",\
                     temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],\
                temp_buf[4],temp_buf[5],temp_buf[6],temp_buf[7],\
                temp_buf[8],temp_buf[9],temp_buf[10],temp_buf[11]);
        break;
    case 13:
        str1.sprintf("0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,",\
                     temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],\
                temp_buf[4],temp_buf[5],temp_buf[6],temp_buf[7],\
                temp_buf[8],temp_buf[9],temp_buf[10],temp_buf[11],\
                temp_buf[12]);
        break;
    case 14:
        str1.sprintf("0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,",\
                     temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],\
                temp_buf[4],temp_buf[5],temp_buf[6],temp_buf[7],\
                temp_buf[8],temp_buf[9],temp_buf[10],temp_buf[11],\
                temp_buf[12],temp_buf[13] );
        break;
    case 15:
        str1.sprintf("0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,",\
                     temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],\
                temp_buf[4],temp_buf[5],temp_buf[6],temp_buf[7],\
                temp_buf[8],temp_buf[9],temp_buf[10],temp_buf[11],\
                temp_buf[12],temp_buf[13],temp_buf[14] );
        break;
    case 16:
        str1.sprintf("0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,",\
                     temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],\
                temp_buf[4],temp_buf[5],temp_buf[6],temp_buf[7],\
                temp_buf[8],temp_buf[9],temp_buf[10],temp_buf[11],\
                temp_buf[12],temp_buf[13],temp_buf[14],temp_buf[15] );
        break;
    }
    return str1;
}
void MainWindow::on_pushButton_clicked()
{

    QString curpath=QDir::currentPath();//保存当前路径

    QString dlgTitle="打开一个文件";

    QString filter=";文本文件(*.bmp);;所有文件(*.*)";//程序文件(*.h *.cpp);

    QString afilname=QFileDialog::getOpenFileName(this,dlgTitle,curpath,filter);

    if(afilname.isEmpty())
    {
        return;
    }

    //openText(afilname);
    ui->label->setText(afilname);
    QFile aFile(afilname);

    if(!aFile.exists())//如果文件不存在
    return ;

    if(!aFile.open(QIODevice::ReadOnly ))//如果不是以只读和文本方式打开文件返回false
    return ;
//|QIODevice::Text
#if 1
    qint64 i,position,left,temp;
    QByteArray line;
    char *buf;//只是一个指针
    int len;//buf的长度

    while (!aFile.atEnd())
    {
    line = aFile.readLine();
    buf = line.data();
    len = line.size();


        uint8_t temp;

        QString str1;
        position = 0;
        left = len;
        while(left)
        {
            if (left>16)
                temp = 16;
            else
                temp = left;

            str1 = qstring2hex(&buf[position],temp);

            ui->textEdit->append(str1);

            position += temp;
            left -= temp;
        }






    }
    aFile.close();

#endif
}

利用QT将一个文件读取且以16进制形式输出_第1张图片

利用QT将一个文件读取且以16进制形式输出_第2张图片

你可能感兴趣的:(Qt)