Я пытаюсь читать и записывать массив longs в двоичный файл, используя fstream. Я массивы определяются следующим образом:C++ Чтение/запись длинных значений в двоичный файл
#define MAX_SUB_BUCKETS 27
unsigned long origin[MAX_SUB_BUCKETS];
unsigned long nextAvail[MAX_SUB_BUCKETS];
fstream fh;
открыть файл и попробуйте выполнить следующие действия:
fh.open(fileName.c_str(), fstream::in | fstream::out | fstream::binary);
if (fh.fail()) {
// create new file here and write all zeroes to it (plus header)
} else {
fh.seekg (0, ios::beg);
for (i=0;i<MAX_SUB_BUCKETS;i++) {
fh.read(origin[i],sizeof(long));
}
for (i=0;i<MAX_SUB_BUCKETS;i++) {
fh.read (nextAvail[i],sizeof(long));
}
}
компилятор жалуется на следующие ошибки:
tld.hh:39: error: invalid conversion from 'long unsigned int' to 'char*'
tld.hh:39: error: initializing argument 1 of 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::read(_CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits<char>]'
tld.hh:42: error: invalid conversion from 'long unsigned int' to 'char*'
tld.hh:42: error: initializing argument 1 of 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::read(_CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits<char>]'
tld.hh:45: error: invalid conversion from 'void*' to 'char*'
tld.hh:45: error: initializing argument 1 of 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::read(_CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits<char>]'
Где линия 39 является первый вызов fh.read(). Не уверен, что я делаю неправильно здесь (за исключением моего основного недостатка знаний об этих вещах). Я также уверен, что есть, вероятно, способ прочитать весь массив происхождения или nextAvail в одном выражении, а не в цикле.
Объявление 'fh', или, по крайней мере, его тип, было бы здесь важно ... –
Если у вас есть даже самые отдаленные прихоти, сделавшие это достаточно переносимым, рассмотрите использование' htonl() 'и' ntohl() ' как только вы получите это в квадрате, кстати. – WhozCraig