Wpis z mikrobloga

Mam problem, postanowiłem problem rozłożyć na najmniejsze możliwe składowe. Oto jedna z nich:

Program w C:

#include

int main(int argc, char **argv) {

unsigned short data[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };

FILE *f = fopen("file.dat", "w");

fwrite(data, sizeof(unsigned short), 15, f);

fclose(f);

f = fopen("file.dat", "r");

unsigned short buf[15];

int read = fread(&buf, sizeof(unsigned short), 15, f);

fclose(f);

return 0;

}

Wynik spoko, zawartość

buf
jest dokładnie taka sama jak zawartość

data
, ale tutaj już pierwsze podejrzenia, plik file.dat wygląda tak (hex):

0100 0200 0300 0400 0500 0600 0700 0800 0900 0d0a 000b 000c 000d 000e 000f
WTF

0d0a
?

Ale spoko, pomyślałem "może jakieś kodowanie".

Ładuję ten sam plik w Matlabie:

f = fopen('file.dat');

data = fread(f, 15, 'uint16');

fclose(f);

data

data =

1

2

3

4

5

6

7

8

9

2573

2816

3072

3328

3584

3840

Co może być nie tak?

#programowanie #matlab
  • 3
@Analityk: Wow, dzięki :-). Zapomniałem o "b" przy otwieraniu pliku i funkcje traktowały to jak tekst, czyli new line zapisały mi po "windowsowemu".

Zmieniłem fopen("file.dat", "w"); na fopen("file.dat", "wb"); i jest OK :D.