如何在C++中使用fstream读写无符号字符到文件?

5

目前我有一个从ifstream读取无符号字符的代码:

ifstream in;
unsigned char temp;

in.open ("RANDOMFILE", ios::in | ios::binary);
in.read (&temp, 1);
in.close ();

这是否正确?我还尝试将无符号字符写入ofstream:

ofstream out;
unsigned char temp;

out.open ("RANDOMFILE", ios::out | ios::binary);
out.write (&static_cast<char>(temp), 1);
out.close ();

但是我写代码时遇到了以下错误:
error C2102: '&' requires l-value

并且出现了读取错误:

error C2664: 'std::basic_istream<_Elem,_Traits>::read' : cannot convert parameter 1 from 'unsigned char *' to 'char *'

如果有人能告诉我代码哪里出了问题,或者如何从fstream中读写无符号字符,我将不胜感激。
2个回答

8
写入错误提示你正在获取由static_cast创建的临时对象的地址。

请改为:

// Make a new char with the same value as temp
out.write (&static_cast<char>(temp), 1);

使用已在临时文件中的相同数据:

// Use temp directly, interpreting it as a char
out.write (reinterpret_cast<char*>(&temp), 1);

告诉编译器将数据解释为字符,读取错误也会得到修复:
in.read (reinterpret_cast<char*>(&temp), 1);

2

read函数总是以字节为参数,这些字节表示为char值以方便使用。您可以随意将指向这些字节的指针进行强制转换,因此

in.read (reinterpret_cast<char*>(&temp), 1);

读取单个字节非常容易。需要记住的是,内存就是内存,C++中的类型只是内存的一种解释。当您将原始字节读入原始内存(如使用read时),应先读取再将其转换为适当的类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接