C++读取/写入长值到二进制文件

标签 c++ fstream

我正在尝试使用 fstream 读取一个长整型数组并将其写入一个二进制文件。我将数组定义如下:

#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() 调用。不确定我在这里做错了什么(除了我对这些事情基本缺乏了解)。我也确信可能有一种方法可以在单个语句而不是循环中读取整个 origin 或 nextAvail 数组。

最佳答案

从错误来看,您似乎正在尝试执行 readunsigned long 上的 s 在 char 上运行秒。你可以尝试这样的事情:

fh.read( reinterpret_cast< char* >( &origin[i] ), sizeof( long ) );

关于C++读取/写入长值到二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14008636/

相关文章:

c++ - 当只有一些小事情需要更改时,如何避免复制粘贴代码块?

C++如何使用fstream读取带空格的制表符分隔文件

c++ - fstream 在不存在的文件上进出

c++ - 如何检测ofstream是否正在写入/dev/null

c++ - 为什么模板只能在头文件中实现?

c++ - 如何从 C++ Vector 中删除尾随 0

c++ - 如何将数据写入单独的行中的每个文件?

c++ - fstream seekg()、seekp() 和 write()

c++ - S() 与 S{} 之间的区别?

c++ - 在 C++ 中使用宏生成函数