~> cat > dbcview.cpp#include <stdint.h>#include <cassert>#include <cstdio>#include <cstdlib>struct dbcHeader_t { uint32_t token, records, fields, recSize, stringSize;};int main(int cnt, char** arg){ assert( cnt == 2 && "argument: filename" ); FILE* file = fopen( arg[1], "r" ); assert( file && "file could not be opened." ); fseek(file, 0, SEEK_END); size_t fsize = ftell(file); fseek(file, 0, SEEK_SET); char* data = new char[fsize]; fread( data, fsize, 1, file); fclose(file); dbcHeader_t* header = reinterpret_cast<dbcHeader_t*>(data); assert(header->token == 'WDBC'); printf("records: %in", header->records); size_t n = 0; char* stringblock = data + sizeof(dbcHeader_t) + header->recSize * header->records; for( size_t i = 0; i < header->stringSize; ++i) { if( i == 0 || stringblock[i] == ' ' ) printf("#%i: ", n++ ); else ; // mistake. if(stringblock[i] != ' ') printf("%c", stringblock[i]); } if(header->records && header->fields) { printf("first entry:n"); char* entry = data + sizeof(dbcHeader_t); printf(" as int: %ldn", *reinterpret_cast<int*>(entry)); printf(" as float: %fn", *reinterpret_cast<float*>(entry)); if(header->stringSize) printf(" as string: %sn", stringblock + *reinterpret_cast<int*>(entry)); } delete[] data; return 0;}~> clang++ dbcview.cpp -o dbcview~> ./dbcview dbcview: dbcview.cpp:12: int main(int, char **): Assertion `cnt == 2 && "argument: filename"' failed.~> touch test && ./dbcview testdbcview: dbcview.cpp:21: int main(int, char **): Assertion `header->token == 'WDBC'' failed.~>