Qt,C ++ - 从文件中读取控制字符

时间:2013-05-14 15:15:23

标签: c++ qt controls character

这是我第一次提出问题所以请耐心等待。

我正在尝试读取要发送到打印机的文本文件的内容。在定义标签打印方式的字符中间有控制字符,STX,SOH,CR,LF。 在我的例子中,我将读取文件的内容并将它们传递给内存中的数据结构(数组),向它附加一些数据,然后直接将其发送到打印机,擦除该结构中的数据。

执行此操作的功能如下:

void ClientThread::readFile2Structure(bool GoodOrBad)
{
    int i = 0;
    int j = 0;

    // Clean structure



    // here clean the structure

    // According to the name comes from the arguments.
    if(GoodOrBad == 1)
    {
        labelFile.setFileName(labelPathGood);
        //qDebug() << "Fez o set filepath" << labelPathGood;
    }
    else if(GoodOrBad == 0)
    {
        labelFile.setFileName(labelPathBad);
        //qDebug() << "Fez o set filepath" << labelPathBad;
    }

    if (!labelFile.open(QIODevice::ReadOnly))
    {
        qDebug() << "Unable to open label definition file PrinterGood.ini/PrinterBad.ini!";
        return;
    }
    else
    {
        while (!labelFile.atEnd())
        {
           temporaryStructure[i] = labelFile.readLine();
           i++;
        }

        // for debug purposes only!
        qDebug() << "Structure";

        for(j=0; j<=i; j++)
        {
            qDebug() << temporaryStructure[j];
        }
    }
}

数据结构具有以下定义:QByteArray temporaryStructure [50];

要发送的文件是: STX f259 CRLF SOH D STX L CRLF STX L CRLF D11 CRLF PC CRLF SC CRLF H25 CRLF 1W1c66000004100202000016036 CRLF

粗体数据是控制字符。

在我的控制台中,当我执行上述功能时,所有控制字符都显示为小方块,甚至不显示CRLF。

为什么这些不同的控制字符显示为小方块,是否会通过复制到QByteArray数组进行修改?

我担心打印机没有任何东西,我仍然没有一个可以测试的,FreeSerialPort Monitor将是一种方式,看看是否一切正常。

感谢您的关注。

1 个答案:

答案 0 :(得分:1)

Unicode有很多字符,据我所知,没有字体代表所有字符。使用特殊字形打印未显示的字符(包括大多数不可打印的字符),最常见的是 - 正方形。

回答问题的第二部分 - QByteArray包含原始数据,并且在复制时不会修改。

为了删除CR和LF,您可以使用:

byteArray.replace('\n', "");
byteArray.replace('\r', "");