Witam mam problem z którym nie moge sobie poradzić. Problem jest bardziej ogólny niz to przedstawie, ale rozwiązanie tej konkretnej sprawy rozwiąże wszystko.
Powiedzmy, że musze pobierać z pliku binarnego dane, które czasami mogą miec 2 bajty czasami 4 czasami 1.
W tym przypadku moje dane będa miały 2 bajty. Plik jest zapisany jako little-endian.
Musze te dane wczytywać do tablicy 4 bajtowych int32_t
void read_file(int32_t *tablica_danych, char* plik)
{
FILE* f_pt = NULL;
f_pt = fopen(plik, "rb");
if (f_pt == NULL)
{
printf("Blad wczytania pliku\n");
}
else
{
int32_t ilosc_danych;// Te dane maja jak jakas wartosc powidezmy 1000 próbek
int32_t rozmiar_danych; // W tym przypadku 2(bajty)
char* buffor = malloc(rozmiar_danych * sizeof(char));
for (int i = 0; i <ilosc_danych; ++i)
{
tablica_danych[i] = 0;
fread(buffor, rozmiar_danych, 1, f_pt);
tablica_danych[i] = buffor[0] | (buffor[1] << 8);
}
fclose(f_pt);
}
}
I kawałek danych wczytuje się poprawnie, ale potem jest bardzo mała różnica na bajtach i nie wiem skad sie ona bierze. Patrzyłem na hex edytorze z tego co widze niektóre bajty różnią się tylko o 1, a spora czesc jest poprawna.
Nie mam pojęcia co sie dzieje, bo np jak podmienie pętle na cos takiego:
int16_t=test
for (int i = 0; i < data->n_size; ++i)
{
data->samples[i] = 0;
fread(&test, data->sample_size, 1, f_pt);
data->samples[i] = test;
}
Wtedy działa to idealnie, ale nie moge założyć, że moje dane będa miały dwa bajty. Mogą mieć maksymalnie 4. Najbardziej mnie dziwi jak blisko są te dane do bycia poprawnymi.
Prosze o pomoc, bo siedzę nad tym od paru h.