2013-07-11 2 views
2

프로젝트에서 작업 중이며 이진 파일로 문자열 (QString)을 작성해야합니다. 문자열은 (Qt C++) QString을 바이너리로 파일로 작성하십시오.

내가 지금까지 YouTube의 튜토리얼이있어 ... 등이 "00010203040506070a0f01"와 같은, HEX 형식으로되어 있습니다 :

void Output() 
{ 
    QString ye("01020a"); 
    QFile file("C:\\Users\\Public\\Documents\\Qt_Projects\\myfile.dat"; 

    if(!file.open(QIODevice::WriteOnly)) 
    { 
     qDebug() << "Could not open file to be written"; 
     return; 
    } 

    QDataStream out(&file); 
    out.setVersion(QDataStream::Qt_5_0); 

    out << ye; 

    file.flush(); 
    file.close(); 
    } 

을하지만 헥스 편집기 "MYFILE.DAT"를 열 때 , 16 진수 값이 다르다면 QString "ye"가 사물의 텍스트면에 쓰여졌습니다.

00 00 00 0C 00 30 00 31 00 30 00 32 00 30 00 61 

도움 말?

답변

7

쓰기 전에 변환해야합니다. 이미 QByteArray을 가지고 직접 쓸 수 있기 때문에

QByteArray array = QByteArray::fromHex(ye.toLatin1()); 
file.write(array); 

당신은 QDataStream를 사용할 필요가 없습니다.

읽고 다음과 같이 진수 표현으로 다시 데이터를 변환 할 수 있습니다

QString에서
QString s = file.readAll().toHex(); 
+0

날이 – mrg95

+0

진짜 빨리 내가 ​​그냥 – mrg95

+0

을 받아들이 궁금 전에 4 분을 기다릴 필요가 매력 :) 들으처럼 일 테스트하자, 어떻게 읽고 가겠어요 QString 파일? 나는 이것의 변종을 추측하고있다. 그러나 무엇이라도 나는 놓치고있다? – mrg95

0

각 문자 (유니 코드 사용) 2 바이트를 차지합니다. 당신은 육각 INT에서 문자의 코드 값을 검색 할 아스키 테이블을 참조 할 수 있습니다

'0': 0x30 
'1': 0x31 
'a': 0x61 

그래서 문자열을 "01020a"의 아스키 코드 순서는 다음과 같습니다 00 30 00 31 00 30 00 32 00 30 00 61

"00 00 00 0C": 나는 그것이 유형 QString에 대한 식별 생각합니다.

불쌍한 표현으로 인해 불편을 끼쳐 드려 죄송합니다.

0

QString을 QFile에 저장;

QString qStr="abc"; 
qFile.write(qStr.toUtf8().constData()); 

conversion sequences are here; 
    QString => QByteArray => const char* => QFile.write() 

[참조 클래스 기능]

QByteArray QString::toUtf8() const; 
const char * QByteArray::constData() const; 
qint64 QIODevice::write(const char * data); 
관련 문제