デコード済のバイナリデータのsplitや、splitされた状態からのjoin(復元)概要ここでは、Ls11Mod APIのAPIとなる「split」と「join」を解説しています。 LS11のファイルをデコードしたとしても、そのままでは、まだ使いにくいデータ形式です。 これらの問題を解決するため、splitとjoinの2つの関数が存在します。 分解と結合// 1つの扱い難いバイナリデータを、意味単位で分解する void ls11_SplitData(vector<byte> &vSrcJoinedData, vector<vector<byte>> *vDstSplittedData); // 分解したものを1つに結合し、元へと戻す。 void ls11_JoinData(vector<vector<byte>> &vSrcSplittedData, vector<byte> *vDstJoinedData); 分解~結合の具体例message.n6pをデコードしたが、そのままでは扱いにくいので、message.005をさらに分解して、vSplittedDataへと格納する。 vector<vector<byte>> vBufDecodedData; ls11_DecodePack("message.nb6", NULL, &vBufDecodedData ); vector<vector<byte>> vSplittedData; ls11_SplitData( vBufDecodedData[5], &vSplittedData ); char *test = (char *)&vSplittedData[3][0]; // └ ここをデバッガで張ればよい。何が得られるかわかるだろう。 // 特定部分を変更をする際には、一度該当要素をコピーした後、該当要素の部分のvector要素をクリアした方が良い。 // vectorは一度要素を確保してしまうと、小さな方向にsize()が変化しにくいので、必ず適切なsize()となるように、意識すること。 vector<byte> vBufJointedData; ls11_JoinData( vSplittedData, &vBufJointedData ); LS11の分解と結合のフォーマットデータの詳細LS11 Archieveで分解して、たとえば、bfile.001となったデータを見てみると、
よって、
という感じ。 これは、途中のデータの長さを伸ばすと、先頭のこれらアドレス群を修正する必要があることを意味する。 今回紹介した、splitやjoinの関数は、
というわけである。 |