2016-08-01 1 views
1

에 UTF16 진수 문자열로 변환 :Qt는 내가이 코드에서 달성 할 것 같은 예를 들어 QString 에 진수와 UTF16 코덱에 문자열을 변환 할 QString

QString str1 = QString::fromWCharArray(L"\x0633\x0644\x0627\x0645"); // what I want 

그러나 나는 다음과 같은 코드를 모든 일을하려고 할 때 이 작업을 수행하는 올바른 방법이 잘못되었습니다.

QByteArray hex = QByteArray::fromHex("0633064406270645"); 
// wrong text in str2 it should be equal to str1 
QString str2 = QString::fromUtf16((char16_t*)hex.data()); 
+0

'QString str2 (hex);'? – wasthishelpful

+0

str1을 UTF16 QBytearray로 변환하고 toHex를 사용하고 0633을 얻는다면 비교해보십시오. – hyde

+0

@wasthishelpful 아니요 전혀 작동하지 않습니다 – AMCoded

답변

4

이 코드에는 어떤 문제가 있습니까?

QByteArray hex = QByteArray::fromHex("0633064406270645"); 
// wrong text in str2 it should be equal to str1 
QString str2 = QString::fromUtf16((char16_t*)hex.data()); 

엔디안은! 이것은 L"\x3306\x4406\x2706\x4506"과 같으며 L"\x0633\x0644\x0627\x0645"이 아닙니다.

그래서 당신이 그것을 테스트하지 않았 문자열

QByteArray hex = QByteArray::fromHex("FEFF0633064406270645"); 
QString str2 = QString::fromUtf16((char16_t*)hex.data()); 

BOM를 추가하지만, 문제가 해결 될 것입니다 수있는이 문제를 극복하기 위해.

대체 솔루션은 sigle UTF-16 문자로 바이트 순서를 플립하는 것입니다 (리틀 엔디안으로 변경).

QByteArray hex = QByteArray::fromHex("3306440627064506"); 
QString str2 = QString::fromUtf16((char16_t*)hex.data()); 
+0

오, QString :: fromUtf16 설명서에서이 줄을 놓치지 '이 함수는 바이트 순서 표시 (BOM) 확인합니다. 누락 된 경우 호스트 바이트 순서가 가정됩니다. ' 덕분에 시간을 절약 할 수 있습니다. – AMCoded