在C++中,通常二进制文件不是按行存储的,因为“行”这个概念通常与文本文件相关,它指的是文本文件中由换行符分隔的序列。但是,如果你的二进制文件有一个特定的结构,使得你可以按某种逻辑上的“行”来读取数据,那么你可以根据这个结构来读取数据。
不过,如果我们假设二进制文件中的数据是按照某种固定大小的块(可以看作是“行”)来组织的,那么你可以按块读取这些数据。以下是一个示例,它展示了如何按固定大小的块读取二进制文件:
cpp
#include <iostream>
#include <fstream>
#include <vector>
int main() {
// 假设每“行”的大小是固定的,例如16字节
const size_t line_size = 16;
// 打开二进制文件
std::ifstream inputFile("1.dat", std::ios::binary);
// 检查文件是否成功打开
if (!inputFile) {
std::cerr << "无法打开文件: 1.dat" << std::endl;
return 1;
}
// 读取文件,按块(或“行”)处理
std::vector<char> buffer(line_size);
while (inputFile.read(buffer.data(), line_size)) {
// 在这里处理每一“行”的数据
// 注意:buffer现在包含了当前“行”的数据
// 例如,打印出这“行”的十六进制表示
for (size_t i = 0; i < line_size; ++i) {
std::cout << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(buffer[i]);
}
std::cout << std::endl;
}
// 如果读取时遇到错误,但不是文件结束,则输出错误消息
if (inputFile.fail() && !inputFile.eof()) {
std::cerr << "读取文件时发生错误" << std::endl;
return 1;
}
// 关闭文件
inputFile.close();
return 0;
}
在这个示例中,我们假设二进制文件中的数据是按16字节的块组织的,并且我们按这些块来读取文件。对于每个块(或“行”),我们将其读入一个字符向量中,并可以对其进行任何需要的处理。
请注意,如果你的二进制文件实际上是有结构的(例如,每行包含一个整数和一个浮点数),那么你需要根据这个结构来解析每个块中的数据。这可能涉及到位操作和/或类型转换。
//来自文心一言