我有一个二进制文件,该文件的开头是这样(十六进制):
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
,但我看不出有任何理由表明增加它可以解决我的问题)。如果删除提示行,则会陷入无限循环。
鉴于我指定了要读取的字节数,所以我不知道如何陷入循环,也不知道如何用尽堆栈空间。