이 두 함수는 QVector를 serialize하려는 제 시도입니다. 불행히도 내 상사는 구현이 Qt 독립적이며 QDataStream이 헤더를 앞에 둡니다 때문에 QDataStream을 사용할 수 없습니다. 따라서 문제는 binToVector 함수가 반환하는 벡터가 크기가 0과 같음을 반환하지만 요소가 인쇄되면 원래 벡터와 같습니다. 왜 벡터의 요소가 원본과 같은 경우 반환되는 크기가 0입니까? 이러한 직렬화 함수는 괜찮습니까? 나는 그것을 구현하기 위해 Qt 함수를 향상시킬 수 없다. 오직 C++만이 가능하다.QVector size() 반환 크기가 0입니다.
QByteArray vectorToBin(const QVector<qint32> & vec)
{
QByteArray result;
foreach(quint32 e, vec) {
char *src = reinterpret_cast<char*>(&e);
result.append(src, sizeof(qint32));
}
return result;
}
QVector<qint32> binToVector(const QByteArray & bytes)
{
int size = sizeof(qint32);
QVector<qint32> result;
result.reserve(bytes.count()/size);
int j=0;
for(int i=0; i<bytes.count(); i+=size) {
memcpy(&result[j++], bytes.constData()+i, size);
}
return result;
}
사장님, QT를 사용하지 않고 QT 데이터 구조를 직렬화 하시겠습니까? – Puppy
이미 QVector를 사용하고 있으므로 구현은 Qt와 독립적 일 수 없습니다. 그것의 헤더 문제라면 앞으로 선언을 시도하십시오. QDataStream이 작성한 것은 기본적으로 휠을 다시 작성하는 것입니다. 상사에게 그가 바퀴를 재발견 할 수 있는지 물어보십시오.) – blueskin
종류, @DeadMG. 그는 * 발생하는 데이터를 프로젝트의 현재 화신에있는 Qt 데이터 구조에 저장하도록 직렬화하려고합니다. 그는 언젠가 특정 Qt 클래스 이외의 다른 것을 사용하기로 결정하거나 다른 비 Qt 사용 프로젝트가 동일한 직렬화 된 데이터를 사용할 수있게하려는 경우 Qt의 직렬화 형식에 묶기를 원하지 않습니다. . –