从\读/写文件到缓冲区

简而言之,我有一个包含二进制数字的文本文件。我需要读取这些数字(不转换为整数或ASCII),并将其正确存储在无符号char Buf中。在电子板上处理完这些数据后,一种方法会从板上读取输出,并将其存储在Buf中。因此,我还需要将Buf中的数据写入输出文件。

首先,我对缓冲区的大小感到怀疑。声明如下所示:

#define Buff_size (long) 255;
unsigned char buf[Buff_size];
  • 255在这里代表什么?无符号字符的位,字节或单词?

  • 我的数据大小是:2048(数字)* 32(位)= 65536位。但是,输入数据文件的大小为68 KB哪个大小实际上是数据大小,我应该使用哪个大小作为缓冲区大小?

我尝试了一些代码,并且我可以运行完整的代码而不会出现错误。但是,当我打印出缓冲区时,我得到了不正确的数据。这是输入\输出文件的声明:

// Open input and output files.
f_in.open(infilename,std::ios::out);
if (false == f_in.is_open()) {
    printf("Error: Input file could not be opened.\n");
    return(false);
}
f_out.open(outfilename,std::ios::in);
if (false == f_out.is_open()) {
    printf("Error: Output file could not be opened.\n");
    return(false);
}

我尝试使用以下两个命令从输入文件f_in中读取输入数据:

1) f_in.read((char*)buf,Buff_size);
2) //f_in >> buf;

当我尝试以以下方式读取buf时:cout << buf << endl;我使用第一个读取命令在最后得到了正确的数据以及一些伪数据。我假设缓冲区的大小不合适,所以我得到了这些伪数据(非常奇怪的随机字符)。当我使用第二条命令时,只会得到输入数据文件的第一行。

总而言之,我需要从文本文件中读取一些数据并将其存储在缓冲区中。然后将输出数据逐行写入输出文件。

za80967190 回答:从\读/写文件到缓冲区

这些位显然用ASCII表示:您需要逐行读取它们的格式,并通过分别解码将它们转换为unsigned char个。例如:

for (std::string line; getline(in,line); ) {
    if (!std::all_of(line.begin(),line.end(),[](char c){ return c == ‘0’ || c == ‘1’; })) {
        // deal with unexpected line
        continue;
    }
    for (int offset = 0; offset + 8 <= line.size(); offset += 8) {
        unsigned char c = std::bitset<8>(line.substr(offset,8)).value();
        // do something with c
    }
}

您想知道的声明主要是对C ++的不了解:在C ++中没有使用#define定义常量的地方。数字的语义明显取决于其使用方式。由于它在紧随其后的线上使用,因此应直接确定它的用途。当然,C ++中固定大小数组的位置也很少。

本文链接:https://www.f2er.com/2850060.html

大家都在问