QDataStream i wielowymiarowa tablica double.

0

Witam.
Mam pytanie jakbym chciał zapisać do pliku wielowymiarową tablice np.

double tabl[100][4] 

Używając QDataStream to należy to zrobić w pętli i podawać kolejno wartości? A potem zrobić analogiczną pętle do odczytu??
Czy to nie jest poprawne podejście?

0

Wydaje mi się, że możesz użyć writeBytes, ponieważ taka tablica jest przechowywana w jednym bloku pamięci. Twój rozmiar to 100 * 4 * sizeof(double).

Edit:
Oczywiście @MarekR22 ma rację, wykorzystanie writeBytes jest rozwiązaniem nieprzenośnym. Mogę się jednak założyć, że OP jest to w ogóle niepotrzebne i dlatego w ogóle o tym nie wspomniałem.

0

Sory mógłbyś jakiś szybki przykład zapodać? Bo nie mogę za bardzo znaleŹć przykładu z tablicą.

1

Najważniejsze to zrozumieć do czego służy QDataStream!
A służy on do jednolitego zapisu danych binarnych niezależnie od stosowanej platformy. Chodzi o utrzymanie spójności danych, które moga być przenoszone pomiędzy platformami o różnej architekturze.
Przykładowo ARM używa BIG ENDIAN a x86 LITTLE ENDIAN, więc zapis int-a bez tej klasy będzie wyglądał inaczej!
To samo się dotyczy zapisu liczb zmiennoprzecinkowych, które na innych architekturach mogą mieć inny standard.

A teraz co do samego tematu. Najprościej stosować QList lub QVector, wtedy zapis tych danych idzie automatycznie (szablony obsługą iterowanie i zapis rozmiaru).
Jeśli jednak chcesz mieć tablicę O STAŁYM ROZMIARZE (danym raz na zawsze dla wszystkich wersji programu), to po prosty iterujesz po tablicy i zapisujesz dane operatorem << element po elemencie.

cont int SIZE_X = 4;
cont int SIZE_Y = 100;
double tabl[SIZE_Y][SIZE_X];

...

for(int i=0; i<SIZE_Y; ++i)
for(int j=0; j<SIZE_Y; ++j)
     dataStream << (qint32) tabl[i][j];

Jeśli nie chcesz stałej wielkości to po prostu, zapisujesz najpierw rozmiar danych.

edit: zapomniałem dodać obowiązkowego castowania dla sprecyzowania rozmiaru (poprawiłem w kodzie).

0

Dzięki wielkie

1 użytkowników online, w tym zalogowanych: 0, gości: 1