我想制作简单的控制台程序。 该程序是死检查程序 有时,日志上的死亡点与实际发生的地方不同。 dlt文件的格式如下。 我想通过c ++解析以下二进制文件。 我尝试了多次读取二进制文件,但是失败了。 如果您可以上传一个简单的示例源,将不胜感激。\ 谢谢
#include <stdio.h>
#include <fstream>
#include <iterator>
#include <algorithm>
#include <io.h>
#include <vector>
#include <string>
#include <conio.h>
using namespace std;
struct dltLogFormat
{
char dltPattern[100];
unsigned int TimeStamp_sec;
int TimeStamp_mic;
char ECU_ID[4];
};
void main()
{
FILE *fp;
vector<string> dltList;
char dltPattern[5] = "";
unsigned int TimeStamp_sec = 0;
int TimeStamp_mic = 0;
char ECU_ID_CHARACTER[5] = "";
char infoHeader;
unsigned short messageLength;
int ECU_ID = 0;
unsigned int sessionID = 0;
int extHeaderInfo = 0;
unsigned int numberOfArguments = 0;
unsigned int applicationID = 0;
unsigned int ContextID = 0;
char payload[17];
_finddata_t fd;
long handle;
int result = 1;
handle = _findfirst(".\\*.dlt", &fd);
if (handle == -1)
{
printf("There were no dlt files.\n");
return;
}
while (result != -1)
{
dltLogFormat dltFormant;
dltList.push_back(fd.name);
printf("File: %s\n", fd.name);
result = _findnext(handle, &fd);
std::ifstream input(fd.name, std::ios::binary | std::ios::in);
while (true)
{
input >> dltPattern;
input.read((char*)&TimeStamp_sec, sizeof(unsigned int));
input.read((char*)&TimeStamp_mic, sizeof(int));
input >> ECU_ID_CHARACTER;
input.read((char*)&infoHeader, sizeof(char));
input.read((char*)&messageLength, sizeof(unsigned short));
input.read((char*)&ECU_ID, sizeof(int));
input.read((char*)&sessionID, sizeof(unsigned int));
input.read((char*)&extHeaderInfo, sizeof(unsigned int));
input.read((char*)&numberOfArguments, sizeof(unsigned int));
input.read((char*)&applicationID, sizeof(unsigned int));
input.read((char*)&ContextID, sizeof(unsigned int));
input.read(payload, sizeof(char)*messageLength);
//header
//input
//extend header
//payload
}
}
}