У меня есть unsigned short int (от 0 до 65535), и я должен сохранить его в файл, используя stdio и потребляя 2 байта, но я не знаю, как это сделать.
Какие-либо предложения?
У меня есть unsigned short int (от 0 до 65535), и я должен сохранить его в файл, используя stdio и потребляя 2 байта, но я не знаю, как это сделать.
Какие-либо предложения?
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();
/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
outputFile.write(&i, 2);
попробуйте outputFile.write(reinterpret_cast<const char*>(&i), sizeof(i));
- person Emile Cormier; 26.02.2011
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;
}
Если вам нужно использовать 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;
}