Short int - как сохранить в файл

У меня есть unsigned short int (от 0 до 65535), и я должен сохранить его в файл, используя stdio и потребляя 2 байта, но я не знаю, как это сделать.

Какие-либо предложения?


person m4tx    schedule 26.02.2011    source источник


Ответы (3)


http://www.cplusplus.com/doc/tutorial/files/ Это приятно читать все это, но необходимая информация находится в «Двоичных файлах» в нижней половине статьи.

ofstream outputFile;
outputFile.open("yourfile.dat");
unsigned short int i;
i = 10;
outputFile.write(&i, sizeof(i));

outputFile.close();
person GolezTrol    schedule 26.02.2011
comment
Это не работает. /mnt/Dane/Projects/Discoverer/Discoverer/src/MapClass/SaveMap.cpp|92|error: no matching function for call to ‘std::basic_fstream<char, std::char_traits<char> >::write(short unsigned int*, int)’| - person m4tx; 26.02.2011
comment
Вместо outputFile.write(&i, 2); попробуйте outputFile.write(reinterpret_cast<const char*>(&i), sizeof(i)); - person Emile Cormier; 26.02.2011
comment
sizeof(i) или sizeof(unsigned short) предпочтительнее жестко заданного 2. - person Emile Cormier; 26.02.2011

Я буду использовать союз (да, я не люблю использовать cast ..):

template <typename T>
union Chunk {
  T _val;
  char _data[sizeof(T)];
};

int main(void) {
   std::ofstream output;
   Chunk<short> num;
   num._val = 42;
   output.open("filepath.txt");
   if (output.good()) {
       output.write(num._data, sizeof(num));
   }
   output.close();
   return 0;
}
person Errata    schedule 26.02.2011
comment
Вы не должны называть своих участников предшествующими символами подчеркивания. Имена с предшествующими символами подчеркивания зарезервированы для компилятора. См. stackoverflow.com/questions/228783/. - person Emile Cormier; 26.02.2011
comment
@ Эмиль: это не так. Имена членов не входят в глобальное пространство имен. - person Steve Jessop; 26.02.2011

Если вам нужно использовать stdio.h (а не iostream):

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  FILE* f;
  unsigned short int i = 5;
  f=fopen("yourfile","w");
  if(f == NULL)
    {
      perror("yourfile is not open");
      exit(EXIT_FAILURE);
    }
  fwrite(&i,sizeof(i),1,f);
  fclose(f);
  return 0;
}
person BenjaminB    schedule 14.03.2011