使用write()将无符号字符写入二进制文件
Writing unsigned chars to a binary file using write()
我正在编写一个读取二进制文件的程序。因此,我将单个字节读取为无符号字符(实际上是将数据作为字符读取,并将每个字符转换为无符号字符)。现在我必须把无符号字符写回二进制文件。
问题是现在我被迫在将它们转换为字符后写入单个字节(因为二进制文件的write()期望char*缓冲区)。所以,现在我必须做以下操作:
for(int x=0; x<data_size; x++)
{
ch=(char)data[x];
outfile.write(&ch,1);
}
是否有办法解决这个问题,以便在读写的情况下减少I/O操作的数量?
可以对指针进行类型转换…
outfile.write((char *)&data[0], data_size);
同样可以用于读取(即只传递指向unsigned char数组的第一个元素的指针,将其转换为指向char的指针)。
outfile
的类型是ofstream
,对吗?ofstream
为typedef
,
typedef std::basic_ofstream<char, std::char_traits<char> > ofstream;
你需要自己的typedef
,
typedef std::basic_ofstream<unsigned char, std::char_traits<unsigned char> > uofstream;
然后,
uofstream outfile(...);
outfile.write(data, data_size); //no need to cast
当data
类型为unsigned char*
或unsigned char[]
时,您只想将位写入文件中,请执行指针强制转换:
for(int x=0; x<data_size; x++)
{
outfile.write((char*)data + x, 1);
}
As强制转换消除了一次一个的问题:
outfile.write((char*)data, data_size);
你一次就做完了。请注意,这优于类型检查,因此不是最佳解决方案。
相关文章:
- 正在读取二进制文件(is_open)
- 在C++中将类(带有Vector成员)保存为二进制文件
- 如何从二进制文件中读取字符串
- 保存/加载大量短数组到二进制文件
- 将结构写入二进制文件后,该文件仍然具有正常字符,而不是不可读字符
- 将无符号字符的向量写入二进制文件 c++
- C++逐个字符读取二进制文件字符
- 将文件信息(字符数组)嵌入到编译的二进制文件中
- 如何在C 中的Little Endian中读取来自二进制文件的单独的十六进制字符
- 使用 std::find 查找从二进制文件中读取的字符并转换为 std::vector 中的 std::string<string> 会产生这种不可预测的行为?
- 使用 c++ / qt 在二进制文件中写入法语字符
- C/C++ 读取具有多个字符串和字符的二进制文件
- 在读取 Visual C++ 中的二进制文件(而不是其他编译器)后,每隔一个字符都是 NULL
- 向二进制文件写入和读取无符号字符
- 使用 ifstream 剂量读取大型二进制文件不会填充字符缓冲区C++
- 用c++将无符号字符存储为二进制文件
- 使用write()将无符号字符写入二进制文件
- 如何将二进制文件读入无符号字符向量
- 二进制文件特殊字符
- 正在从二进制文件检索数据,无意义字符