C++逐个字符读取二进制文件字符
C++ read binary file char by char
我有一个任务,即按其数据成员的特定顺序保存一些对象数据,我将尝试简化.请考虑二进制文件中的此基类构造函数。(请注意,使用字符 *不是我的选择(。
Base(ifstream & in_file) {
int n;
in_file.read((char *)&n, sizeof(n));
m_var = new char[n + 1];
in_file.read(m_var, n);
m_var[n] = ' ';
in_file.read((char *)&m_intvar, sizeof(m_intvar));
}
它必须初始化m_var(char *(和另一个整数变量。这段代码有效,尽管它需要保存 char * 的长度以便我分配内存。
问题从这里开始。我被指示不要保存字符串的大小,而只在我写入文件的每个值后输入一个n
。所以我需要一些如何读取文件,并获取字符串直到n
字符。
我正在考虑逐个字符读取字符,但找不到一种方法,我认为有一个 istream 函数可以提供这一点。我认为一些与>>
文本文件类似的功能也会很好。
在咨询 cppreference.com 后,我得出如下结论:
#include <fstream>
#include <iostream>
#include <cstring>
class Base
{
public:
Base(std::istream & in_file) { // NOTE: changed to istream to allow reading from any stream not just files
in_file.read((char *)&n, sizeof(n));
char buffer[1024];
in_file.get(buffer, sizeof(buffer), 'n');
size_t gcount = in_file.gcount();
if (in_file.get() != 'n')
{
throw std::runtime_error("binary string to long"); // you may want to implement a loop here using peek() to check for newline
}
m_var = new char[gcount];
std::copy(buffer, buffer + gcount, m_var);
}
Base(int num, const char* strg)
: n(num)
, m_var(strdup(strg))
{
}
bool operator == (const Base& rhs)
{
return n == rhs.n && strcpy(m_var, rhs.m_var);
}
void write(std::ostream& out)
{
out.write((char*)&n, sizeof(n));
out.write(m_var, strlen(m_var));
out.write("n", 1);
}
int n;
char* m_var = nullptr;
~Base()
{
delete m_var;
}
};
int main(int, char**)
{
Base b1(10, "Hello Word!");
{
std::ofstream out("testfile.bin");
b1.write(out);
}
std::ifstream in("testfile.bin");
Base b2(in);
if (b1 == b2)
{
std::cout << "read ok!" << std::endl;
}
else
{
std::cout << "read failed!" << std::endl;
}
return 0;
}
4 年后,但我遇到了类似的问题并找到了这篇文章。 正如你提到的,你可以用循环逐个字符地阅读。
int i;
for(i=0;;i++){
cout<<i;
in_file.read(&buffer[i],sizeof(char));
if buffer[i]=='n') break;
}
我想出的代码的唯一问题是它保存了""。但是,在找到新行""后,您可以并且应该将其替换为空字符"\0"。 (缓冲区[i]=='\0'(
如果我弄错了,请纠正我。
相关文章:
- 尝试一次将单个字符读取到大小不确定的数组中
- C++将 txt 数据和字符读取到 2D 数组中
- C++ UTF-8 瑞典语字符读取为 ASCII
- C++逐个字符读取二进制文件字符
- 逐个字符读取文件并使用<cctype>
- C 如何通过特定n字符读取TXT文件的值
- 如何使用4个字符读取C 的文本文件
- 使用C++中的字符读取具有文件 I/O 的文件
- 是否可以从C 中的文件中的线中的特定字符读取
- 将字符读取到数组
- 如何在 c++ 中逐个字符读取文件并通过 array_name[index] 访问它
- 如何从文本文件中读取,C++中逐个字符读取
- 如何将多个字符读取合并为std::向量
- 在 c++ 中逐个从文件字符读取
- C++ 中有多少个方法逐个字符读取字符串,以对每个字符执行所需的操作
- scanf 只能将 3 个字符读取到 5 位字符数组中
- 将行的前 X 个字符读取为字符串
- 逐个字符读取以查看它是否是数字
- 如何从字符**读取字符串
- 如何逐个字符读取文件的全部内容