gpt4 book ai didi

c++ - 在 C++ 中解析二进制文件

转载 作者:搜寻专家 更新时间:2023-10-31 01:18:40 30 4
gpt4 key购买 nike

我正在尝试使用 C++ 读取二进制格式出于某种原因,我只能解析第一个变量。标题序列是:[2 字节整数][1 字节整数][1 字节整数]

#include <iostream>
#include <fstream>

using namespace std;

struct HDR {
unsigned short int signature;
unsigned char version;
unsigned char tricnt;
} header;

int main(){
ifstream infile("1.mdl",ios::in | ios::binary);
if(!infile){
cout<<"Error\n";
return 1;
}
infile.read(reinterpret_cast<char *>(&header),sizeof(HDR));
cout<<"SIG "<<header.signature<<endl;
cout<<"VER "<<header.version<<endl;

cout<<"TRI "<<header.tricnt<<endl;
return 0;
}

出于某种原因,我只能解析签名,结构的其余部分是空的。

最佳答案

除非您特别了解您的实现所使用的填充,否则您应该单独阅读成员。

infile.read(reinterpret_cast<char *>(&header.signature), sizeof header.signature);
infile.read(reinterpret_cast<char *>(&header.version), sizeof header.version);
infile.read(reinterpret_cast<char *>(&header.tricnt), sizeof header.tricnt);

当然,您仍然依赖于 unsigned short 在您的平台上是 2 个字节,并且文件中的表示与您的机器具有相同的字节顺序,但至少您没有对结构做出假设填充。

自然地,当您打印 unsigned char 时,表示的字符将被打印。如果您想查看数值,您应该转换为非 char 整数类型。 ASCII 1(标题开始)和 3(文本结束)是控制字符,打印时通常不可见。

cout<<"VER "<< static_cast<int>(header.version) <<endl;
cout<<"TRI "<< static_cast<int>(header.tricnt) <<endl;

关于c++ - 在 C++ 中解析二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6888272/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com