Ifstream二进制读/写只接受char*
ifstream binary read/write only takes char*?
我在弄清楚如何正确地将此值写入文件时遇到了一点麻烦。我在网上查了一下,找到了这篇文章。
http://www.eecs.umich.edu/courses/eecs380/handouts/cppbinaryfileio - 2. - html
#include <fstream>
#include <iostream>
int main()
{
int testVar = 71;
std::ofstream outputFile;
outputFile.open("C:/binary.dat", std::ios::out | std::ios::binary);
outputFile.seekg(0);
outputFile.write(&testVar, sizeof(testVar));
outputFile.close();
}
我从文章中理解的是,第一个参数是一个空指针?这意味着它可以接受任何类型?但是当我输入它的时候,智能感知告诉我没有重载并且第一个参数的类型是char*
我是否使用了错误的头或旧的c++版本??
这里真的需要一些帮助。谢谢!
我不熟悉函数的开发历史。因此,我不能评论为什么参数的类型是char*
而不是void*
。
要解决你的问题…
你可以使用:
outputFile.write(reinterpret_cast<char*>(&testVar), sizeof(testVar));
在使用istream::read()
的同时也使用reinterpret_cast
您实际上只需要像前面所说的那样将其强制转换为char*,但是代码中存在其他问题。Seekg()用于输入流,您正在编写输出文件。如果您想清除这一行,只需使用trunc.
打开文件。#include <fstream>
#include <iostream>
int main()
{
int testVar = 71;
std::ofstream outputFile("C:/binary.dat", std::ios::out | std::ios::binary | std::ios::trunc);
outputFile.write((char*)&testVar, sizeof(testVar));
outputFile.close();
}
第一个参数为char*
。char
的大小为1字节,表示字节数据,char*
表示数据块。
因此,当写入原始二进制数据时,数据作为char*
和块的大小传递。
我是否使用了错误的头或旧的c++版本??
不,这不是问题,它是char*
,而不是void*
作为参数。
seekg()成员函数用于输入流。我认为你需要的功能是seekp()
相关文章:
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 类型"int"和"const char [15]"到二进制"运算符<<"的无效操作数^
- 从带有 std::ifstream::read() 的文件中读取 int 遍历 char * 二进制数据
- 错误:二进制">>":未找到采用类型为"const char [1] 的右操作数的运算符
- 我收到一个错误无效的操作数,类型为 const char [42] 和二进制"运算符+"的双倍数
- C++:"错误:类型'const char*'和'const char [28]'的操作数无效到二进制'ope
- 将二进制字节 (char*) 转换为 uint64_t*,是否安全
- C 字符串到C char数组,以写入二进制文件
- 将字符串中的二进制数据转换为char
- C++/C:Char[]的前缀长度(以字节为单位)(二进制/十六进制)
- 错误:“ const char*”类型的操作数和“ const char [7]”类型为二进制“操作员 ”
- 为什么使用char数组来存储以二进制模式打开的文件的内容
- 类型为"double" snd const char [3]' 到二进制'operator<<'的无效操作数
- 在C++中使用char*进行从二进制到十进制以及从十进制到二进制的转换
- 使用 uint8_t 或 char 来表示以字节排列的二进制数据更好吗?
- 在C++中读取二进制文件时将char*转换为double
- 'double' 和 'const char [2]' 到二进制"运算符!="的无效操作数|
- 将二进制文件读入 std::vector<uint16_t> 而不是 std::vector<char>
- 使用char数组的C++二进制搜索
- 二进制表达式的操作数无效("ostream"(又名"basic_ostream<char>")和"ostream")