2016-08-02 2 views
1
#include <QCoreApplication> 
#include <QByteArray> 
#include <QDebug> 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    QByteArray dataReceivedFromSerialPort; 

    dataReceivedFromSerialPort.push_back(0x0A); 
    dataReceivedFromSerialPort.push_back(0x0B); 
    dataReceivedFromSerialPort.push_back(0x0C); 
    dataReceivedFromSerialPort.push_back(0x0D); 
    dataReceivedFromSerialPort.push_back(0x0E); 
    dataReceivedFromSerialPort.push_back(0x0F); 
    dataReceivedFromSerialPort.push_back(0x07); 
    dataReceivedFromSerialPort.push_back(0x02); 
    dataReceivedFromSerialPort.push_back(0x01); 
    dataReceivedFromSerialPort.push_back(0x02); 

    qDebug() << "tostr: " << dataReceivedFromSerialPort.toStdString().c_str(); 


    return a.exec(); 
} 

위의 값은 인쇄되지 않습니다. "tostr :"이상의 내용은 인쇄하지 않습니다. uchar에 0x0A를 저장하고 qByteArray에 푸시하면이 문제가 사라집니다.qDebug를 통해 qByteArray 인쇄

현재 양식으로 인쇄하려면 어떻게해야합니까?

+2

왜 세계에서 단지'qDebug() << dataReceived; '를 사용하는 대신에 이러한 변환을 수행해야합니까? – peppe

+0

예제는 설계된대로 작동합니다. 나는 네가하려는 것을 이해하지 못한다. 인쇄 할 수없는 코드를 인용하고 싶다면 명시 적으로 지정해야합니다. 'dataReceivedFromSerialPort'는 로컬 인코딩, 즉 UTF-8에 있어야합니다. 그것이 아니라면, 그것을 당신에게 보여주기 위해 마사지하는 것입니다. –

답변

1

많은 인코딩에서 다양한 제어 문자 (개행, 캐리지 리턴 등)를 제공하기 때문에. std::stringchar*을 통해 이동하면 바이트가 터미널에있는 그대로 전송되어 해당 방식으로 표시됩니다 (전혀 그렇지 않거나 다양한 공백 유형).

는 당신은 당신이 원하는 것을 대신에 따라 다음 중 하나를 수행하려고 할 수

: 당신이 유 대신 \ X가 \ 참조, 그 이유는

qDebug() << dataFromSerialPort; // prints "\n\x0B\f\r\x0E\x0F\x07\x02\x01\x02" 
qDebug() << QString::fromLatin1(dataFromSerialPort); // prints "\n\u000B\f\r\u000E\u000F\u0007\u0002\u0001\u0002" 
qDebug() << dataFromSerialPort.toHex(); // "0a0b0c0d0e0f07020102" 
qDebug() << qPrintable(dataFromSerialPort); // same as toStdString().c_str(), but IMO more readable. 

이 여러 가지가 escape sequences (QString이 유니 코드를 사용에 바이트를 인쇄있어)를 읽을 수있는 16 진수 표현으로 "있는 그대로"제공합니다.

QDebug는 QString 및 QByteArray와 같은 많은 알려진 형식에 대해 특수 서식을 지정하기 때문에 위의 처음 세 예제는 따옴표로 인쇄하고 이스케이프 시퀀스를 작성합니다 (결국 디버깅 용입니다). toStdString().c_str()과 매우 비슷한 qPrintable은 QDebug가 특별한 방법으로 형식화하지 않는 char *를 반환하므로 공백을 출력으로 가져옵니다 (이것은 std::cout 및 친구들과 동일한 동작입니다).

+0

아이디어 (QByteArray 및 QString)는 C++ 소스 코드로 C & P 할 수 있도록 출력을 인용하는 것입니다. – peppe

+0

많은 감사 ... –