从二进制文件读取指定数量的字节时发生无限循环

时间:2018-07-30 00:52:59

标签: c++ binary-data

我有一个二进制文件,该文件的开头是这样(十六进制):

FFFF7FFF FFEFFFFF FFFFFFFF 0000454C 0000AA0E 2D2D2D2D 00002892 425A6839 31415926 5359F7B8
FA590000 A4FFFFFF FFFFFFFF FFFFFFFF FFFFFDFF EBFFFFFF FFFF7FFF FFEFFFFF FFFFFFFF FFFFFFE0 
00

我正在尝试使用C ++读取标题。我有看起来像这样的代码:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cstring>

using namespace std;

typedef struct {
    char tp[9];
    char xt[3];
    uint32_t jdt;
    uint32_t jtm;
    char nm[4];
} Header_1;
int main(){

    Header_1 test;
    ifstream infile("./testbin", ios::in | ios::binary);
    vector<unsigned char> head_bytes(24, 0);
    infile.read((char*)&test, head_bytes.size());

    vector<unsigned char> comp_record(12, 0);
    infile.read((char*)&comp_record, comp_record.size());
    cout <<(char)comp_record[0]<<endl;


}

我正在macOS 10.13.4上使用clang / g ++进行编译,g++ --version输出如下:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 9.1.0 (clang-902.0.39.2)
Target: x86_64-apple-darwin17.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

每当我编译/运行代码时,我都会得到两个结果之一,这取决于我是否留在最后的提示行中。如果在其中,则程序会因Segmentaion Fault 11而崩溃(在macOS上,这似乎是堆栈大小问题,我的堆栈大小为8192,但我看不出有任何理由表明增加它可以解决我的问题)。如果删除提示行,则会陷入无限循环。

鉴于我指定了要读取的字节数,所以我不知道如何陷入循环,也不知道如何用尽堆栈空间。

0 个答案:

没有答案