我正在尝试解析一个 .dat
文件,用这段代码逐字节读取它。(文件名在 arv[1] 中)
std::ifstream is (arv[1], std::ifstream::binary);
if (is) {
is.seekg (0, is.end);
int length = is.tellg();
is.seekg (0, is.beg);
char * buffer = new char [length];
is.read (buffer,length);
if (is)
std::cout << "all characters read successfully.";
else
std::cout << "error: only " << is.gcount() << " could be read";
is.close();
}
现在所有文件都在 buffer
变量中。该文件包含以 32 位表示的数字,我如何遍历缓冲区一次读取 4 个字节并将它们转换为整数?
最佳答案
首先,你有内存泄漏,你动态分配字符数组但从不删除[]它们。
使用 std::string
代替:
std::string buffer(length,0);
is.read (&buffer[0],length);
现在,假设您已正确写入整数,并将其正确读入缓冲区,您可以使用此字符数组作为指向整数的指针:
int myInt = *(int*)&buffer[0];
(你明白为什么吗?) 如果您存储了不止一个整数:
std::vector<int> integers;
for (int i=0;i<buffer.size();i+=sizeof(int)){
integers.push_back(*(int*)&buffer[i]);
}
关于c++ - 将文件中的字节转换为整数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31477638/