은 signed int
의 typedef이며 Qt에서 지원하는 모든 플랫폼에서 32 비트가 될 것이라는 Qt의 설명서가 있습니다.qint32를 이식 가능하게 (de) 직렬화하는 방법?
This은 short
이상이어야하며 16 비트 이상이어야합니다. 따라서 typedef에만 크기의 보증은 없습니다. Qt는 그 주위에 그 it seems를 얻는다.
그래서 Qt를 사용한 (비) 직렬화는 크기가 항상 그렇게되기 때문에 좋습니다. 그러나 이것은 내가 생각하는 숫자의 이진 표현에 대해서는 아무 것도 말하지 않는다. 그리고 이식성있게 직렬화 할 때 중요합니다. 이 일을 예를 들어
QFile file("somefile");
file.open(QIODevice::WriteOnly);
qint32 i = 10;
file.write(reinterpret_cast<const char*>(&i), sizeof(i));
file.flush();
file.close();
는 바이너리 형식의 파일에 값 10 qint32
을 작성합니다. 나는이 일을 Qt를 작성 다른 응용 프로그램에 네트워크를 통해 해당 파일을 보낼 때 :
QFile file("somefile");
file.open(QIODevice::ReadOnly);
qint32 i = 0;
file.read(reinterpret_cast<char*>(&i), sizeof(i));
file.close();
난 정말 다시 번호를하지만 항상 10로 보장 할 것인가? 나는 그 기계에서 10의 2 진 표현이 다를 수 있다고 생각하지 않는다. 그러나 그것이 틀린 것을 이해할 수 있으며 이것은 (적어도 Qt가 지원하는 플랫폼에서) 논쟁의 여지가 없습니다.
내 질문 : 어떻게 portably (드) Qt에서 원시 타입을 직렬화? 또는 사이즈 보증은 충분합니까?
Qt는'CHAR_BIT == 8'과'sizeof (int) == 4'가 아니면 컴파일하지 않습니다. 이것은 명백하게 테스트되었습니다. https://code.woboq.org/qt5/qtbase/src/corelib/global/qglobal.cpp.html#106 – peppe