Я хочу, Как читать двоичный файл DLT без VILER DLT, используя C ++ Fstream - PullRequest
0 голосов
/ 09 сентября 2018

Я хочу сделать простую консольную программу. программа не проверяет программу Иногда точка смерти на бревне отличается от того, где это фактически произошло. Формат файла 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
        }
    }
}
...