2017-11-22 4 views
0

qt에서 QByteArray와 String이 어떻게 작동하는지 이해하려고합니다. 그래서, 다음과 같은 경우에 QByteArray를 메모리에 생성합니다.QString에서 QByteArray 가져 오기

QByteArray qba; 
quint8 version = 1; 
qba << version; 
quint8 type = 122; 
qba << type; 

qDebug() << qba.length() << " " << QString(qba); 

디버그 문 인쇄 :

2 "\u0001z" 

그래서, 나는 데이터의 2 바이트를 가지고 문자열 표현이 추출됩니다.

자, 이제는 문자열 표현 (원시 C++ char 배열로 제공되는)부터 시작하여 QByteArray 표현을 만듭니다. 다음과 같이 그래서 나는 배열을 만들 :

char msg[] = { '\\', 'u', '0', '0', '0', '1', 'z', '\0' }; 
QString testStr = QString::fromUtf8(msg); 
QByteArray testRaw = testStr.toUtf8(); 
qDebug() << testRaw.length() << " " << QString(testRaw); 

을 지금이 인쇄 :

7 "\\u0001z" 

내가 그런 문자 배열에서 시작하여 바이트 배열 표현을 얻을 수있는 방법을 모르겠습니다. 이 문자열 인코딩 문제입니다하지만 난 어떤 문자열 (등 fromLatin1, fromUtf16) 내가 시도 방법

을의 내가

+0

"\ u0001와"에 귀하의 편집 직후 답변하십시오. 이제 당신의 질문이 정확하지 않다는 것을 알았습니다. 이 전환이 필요한 이유는 무엇입니까? –

+0

데이터 매트릭스 이미지를 디코딩하는 라이브러리 libdmtx를 사용하기 때문에이 변환이 필요합니다. 디코더는'const char *'를 반환하고 기본적으로 구문 분석을 위해 바이너리 표현을 얻으려고합니다. 나는 반환 된 문자열이 UTF-8로 인코딩되어 있다고 추측하고 있지만 잘 모르겠습니다. 그들로부터의 문서는 아무 것도 말하지 않는다. 현재 인코딩을 알고있는 QByteArray와 const char * 사이에서 앞뒤로 어떻게 움직일 수 있는지 재현하려고합니다. – Luca

답변

0

변환 QString 사이를 Qt는 5.9을 사용하고 관계없이이 이진 표현을 다시 만들 수없는 경우 나는 확실하지 않다 QByteArray은 인코딩에 의존합니다! QString(qba)은 데이터가 UTF-8로 인코딩되어 있다고 가정합니다 (QString documentation 참조). 다른 방향에서

당신은 : 등등

및 ANS, 그 반대의 경우도 마찬가지 정적 방법이 있습니다. 이 지수 및 인쇄 할 수없는 문자로 둘러싸여 이유 qDebug() << anyString; 그대로 있지만 개발자 형태로 데이터를 인쇄하지 않습니다


하는 것으로, 그 변환 된 것입니다 내가 게시 한


QByteArray qba; 
quint8 version = 1; 
qba << version; 
quint8 type = 122; 
qba << type; 

// character '\1' is not printable, so qDebug do a developer friendly conversion 
qDebug() << qba.length() << " " << QString(qba); 

// to revert conversion, you code should look like this: 
QString convnerted(qba); 
QByteArray reverted = convnerted.toUtf8(); 

Q_ASSERT(reverted == qba); 
+0

답변 해 주셔서 감사합니다. 그래서 QString (Qba)은 나에게 utf-8 표현을주었습니다. 그래서, 나는 코드에서 두 번째 부분에서 똑같은 작업을 시도했다. QByteArray를 복구 할 수없는 이유는 무엇입니까? 나는'QString testStr = QString :: fromUtf8 (msg); 줄이 줄 똑같은 표현을 줄 것이라고 생각했다. – Luca

+0

어떤 버전의 Qt? Qt4는이 문제에있어 다른 행동을합니다. –

+0

예.하지만 변환 된 QByteArray의 길이가 2 대 7이 같지 않습니다. 따라서 문자열 표현의 일부가 잘못되었습니다. – Luca