ここでは、Ls11Mod APIの最も基本的なAPIとなる「デコード」と「エンコード」を解説しています。
// 圧縮されたLS11フォーマットをデコードする関数 int ls11_DecodePack(char *szInputFileName, char *szOutputPattern, vector<vector<byte>> *pvecDstDataArray=NULL); // 展開された1つ以上(複数可)の一連の連番ファイルを、1つのLS11フォーマットにする。 int ls11_EncodePack(char *szOutputFileName, char *szInputPattern, vector<vector<byte>> *pvecSrcDataArray=NULL, vector *pDstLS11PackedData=NULL);
#include "ls11_mod.h" ls11_DecodePack("hexgrp.nb6", "subhex");
#include "ls11_mod.h" vector<vector<byte>> vBufExpandData; ls11_DecodePack("hexgrp.nb6", NULL, &vBufExpandData );
// hexgrp.000相当のバイナリデータ vBufExpandData[0]; // hexgrp.002相当のバイナリデータ vBufExpandData[2]; // hexgrp.001相当のデータをバイナリエディタで開いたと仮定した時の、3番目のバイトデータ vBufExpandData[1][2]; // hexgrp.001相当のバイナリデータの先頭のバイトのアドレス。 // 各々のvectorは、必ず先頭から連続した配置位置であることが保障されているので、先頭のアドレスを取って処理することは有効に機能する。 byte *pData1Begin = &vBufExpandData[1][0];
#include <algorithm> #include <iostream> #include "ls11_mod.h" int main(void) { // sndata.n6pをvSnDataN6Pに格納 vector<vector<byte>> vSnDataN6P; int iError = ls11_DecodePack("sndata.n6p", NULL, &vSnDataN6P); if (iError) { return -1; } // sndata.n6pと、実際の見た目上の並びがことなるため。要するにシナリオのIDは見た目どおりの昇順ではないということ。 swap(vSnDataN6P[3],vSnDataN6P[4]); swap(vSnDataN6P[2],vSnDataN6P[3]); swap(vSnDataN6P[1],vSnDataN6P[2]); //デバッグ用 for ( int i=0; i<(int)vSnDataN6P.size(); i++) { cout << (int)(1454+vSnDataN6P[i][0xb7]) << endl; // 開始年代は、0xB7の位置に存在する。1454を足すと西暦となる。 } }
#include "ls11_mod.h" ls11_EncodePack("hexnew.nb6", "subhex");
#include "ls11_mod.h" vector<vector<byte>> vBufExpandData; ls11_DecodePack("hexgrp.nb6", NULL, &vBufExpandData ); ls11_EncodePack("hexnew2.nb6", NULL, &vBufExpandData );
#include "ls11_mod.h" vector<vector<byte>> vBufExpandData; ls11_DecodePack("hexgrp.nb6", NULL, &vBufExpandData ); vector<byte> vBufPacked; ls11_EncodePack(NULL, NULL, &vBufExpandData, &vBufPacked );