Чтение DWORD из двоичного файла - PullRequest
1 голос
/ 06 апреля 2010

Почему эти строки кода не работают, когда я пытаюсь прочитать DWORD num = 1880762702, используя fread(&num, "file path", 1, FILE*); Я получаю result = 10574, если я изменяю число на любое другое число, скажем 2880762702, только тогда оно работает.

Ответы [ 2 ]

3 голосов
/ 06 апреля 2010

Для считывания многобайтовой величины, такой как DWORD (для 32-битного числа речь идет о Win32), вам необходимо знать порядковый номер . Лучше всего читать по одному байту за раз и преобразовывать из порядка следования байтов, используемого в файле.

FILE *in;
DWORD num = 0;

if((fin = fopen("filename.bin", "rb")) != NULL)
{
  unsigned char b0, b1, b2, b3;

  fread(&b3, sizeof b3, 1, in);
  fread(&b2, sizeof b2, 1, in);
  fread(&b1, sizeof b1, 1, in);
  fread(&b0, sizeof b0, 1, in);

  // Assuming file is big-endian.
  // for little endian, swap the order to b0...b3
  num = (((DWORD) b3) << 24) | (((DWORD) b2) << 16) | (((DWORD) b1) << 8) | b0;

  fclose(in);
}
1 голос
/ 06 апреля 2010

Второй параметр fread() - это размер данных, которые вы хотите прочитать. В вашем случае это sizeof(DWORD).

...