Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将文件从\读取/写入缓冲区_C++_File_Buffer_Binary Data - Fatal编程技术网

C++ 将文件从\读取/写入缓冲区

C++ 将文件从\读取/写入缓冲区,c++,file,buffer,binary-data,C++,File,Buffer,Binary Data,我有一个包含二进制数的文本文件。我需要读取这些数字(不转换为整数或ASCII),并将它们正确地存储在无符号字符Buf中。在电子线路板上处理这些数据后,一种方法读取线路板的输出,并将其存储在Buf中。因此,我还需要将数据从Buf写入输出文件 首先,我怀疑缓冲区的大小。声明如下所示: #define Buff_size (long) 255; unsigned char buf[Buff_size]; 255在这里代表什么?无符号字符的位、字节或字 我的数据大小是:2048(数字)*32(位)=

我有一个包含二进制数的文本文件。我需要读取这些数字(不转换为整数或ASCII),并将它们正确地存储在无符号字符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_中读取输入数据:

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

当我试图将buf读取为:
cout时,位清楚地写为ASCII:您需要逐行读取格式化的位,然后通过对它们进行单独解码,将它们转换为无符号字符。例如:

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
    }
}
for(std::string line;getline(in,line);){
如果(line.begin()、line.end()的(!std::all_),
[](字符c){返回c='0'| | c=='1'}){
//处理意外线路
继续;
}

对于(int offset=0;offset+8您能举例说明您的输入文件是什么样子的吗?您的描述令人困惑,似乎自相矛盾。我的输入是这样的:0000000000 10000101101010110111011100000000000000 1000010110101011011111101100000000000101110000100100111 0000000000 1000010110101011011100000000000101110000111 0000000000010001011010101101110110000000000 1000010110101011011101100000000000101110011100100100111 0000000000 1000101101010110111011一个数字(32位)在一行中。如果您的数字长度为32位,那么您将如何将它们存储在8位无符号字符中?因为它们是文本,所以文件中的数据大小为每个数字32字节,这可能有助于您了解位和字节之间明显的大小差异。仍然不清楚您的目标是什么。好的,那么每个数字将是什么e存储为8位,因为数据是以文本形式读取的,对吗?你能告诉我你不清楚哪一部分,以便我可以进一步解释吗?我需要与电路板进行USB通信,以测试一些硬件。我需要将输入作为二进制输入到电路板,然后读取其输出并将其存储在输出文件中。输入和输出数据应该是二进制的mbers。我用于USB通信的库使用无符号字符缓冲区作为变量来存储要发送到电路板的数据和从电路板输出的数据。因此,我的目标是正确读取这些二进制数据并将其存储在缓冲区中。然后将存储在无符号字符缓冲区中的输出写入输出文件。您好,谢谢你的回复!是的,事实上,我对C++的了解不多,老实说,你的回答远远超出了我的基本理解。我希望你能简化你的回复,并对我能理解的语言做出进一步的评论。我不完全理解你提到的代码,但我认为第二个for循环会在每次迭代时用新值更新c。我想做的是,读取数字输入文件并将它们存储在一个数组中,所以每次迭代我都需要向数组中添加数字,而不是覆盖旧数据。再次感谢,我希望能在也就是说,你的代码假设我有一个字符串中的所有数据,对吗?我如何正确地从文件到字符串读取数据?关于不理解C++的评论,你不会把代码写入到你的老师那里。我的代码在外循环的每个迭代中读取一行文本,产生一个<代码>未签名的C。har
每次迭代都是内部循环。将它们分配到数组中等于将它们分配给数组的连续元素……我不知道如何使代码更简单:它只是使用惯用的方法处理所需的不同子任务。那么代码是向数组添加值还是覆盖旧数据?谢谢我发布的代码两者都没有:它将当前生成的值保存在一个变量中,该变量在迭代结束时将超出范围。如果您想这样做,您需要将其值粘贴到数组中的一个合适位置。但是,我不想为家庭作业提供现成的解决方案:答案是JU不要放弃相关的入口点。