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

Qt, C++ - Reading control characters from a file

本文关键字:读取 控制字符 文件 c++ Qt      更新时间:2023-10-16

这是我第一次提问,请耐心等待。

我正在试图阅读文本文件的内容,这意味着要发送到打印机。在定义如何打印标签的字符中间有控制字符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];

要发送的文件为:strong>STX f259 CRLF SOH D STX L CRLF stx l crlf 这里 CRLF PC CRLF SC CRLF H25 CRLF 1W1c66000004100202000016036 CRLF

粗体部分为控制字符。

在我的控制台中,当我执行上面的函数时,所有的控制字符都显示为小正方形,甚至没有出现CRLF。

为什么这些不同的控制字符显示为小方块,这些将被修改与复制到一个QByteArray数组?

恐怕打印机什么也出不来,我还没有一个可以测试的,FreeSerialPort Monitor将是一种方法,看看是否一切都是正确的。

感谢您的关注

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

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

要删除CR和LF,可以使用:

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