Re: dessed
At Fri, 17 Oct 2003 13:21:10 +0900,
Fujii Hironori wrote:
>
> もしも、がんばる方がいらっしゃいましたら、
V3 の情報がどれだけ訳に立つかは分かりませんが、
以前書いたメモを流しておきます。
---
システムソフト電子辞典シリーズ
*.DIC ファイル
JIS X 4081 の 1 block は 2048 byte (0x800 byte) 。
概略だけ書くと、
0x8000バイト毎に切って、オフセット長12bit、文字列一致長4bitの
LZ77 で圧縮したものを連結してあります。
16 block 分が 32768 byte, 0x8000 byte
LZ77 とは、
「x 文字前より y 文字コピー。その次が文字 `z'。」
このような x, y, z の繰り返し。
x: オフセット
y: 文字列一致長
1バイトは8ビットとします。基本的にビッグエンディアン。
ファイル構造はヘッダ部、オフセット部、チャンク部の三部構成。
* ヘッダ部
64バイト
00-08: SSEDDATA
09-0e: 不明。バージョン?
0f-0f: 種類?
10-15: 不明
16-17: チャンク数 n_chunk
18-1b: num1 先頭ブロック番号
1c-1f: num2 終了ブロック番号
20-3f: 不明
* オフセット部
n_chunk * 4 バイト
オフセットはファイルの先頭からチャンクの開始位置
* チャンク部
n_data * 3 + 5 バイト
00-02: ゼロ
03-04: データ数 n_data
05-05: ウィンドウの初期化文字
06-07: オフセット(12bit)と文字数(4bit)
08-08: 文字
...
o オフセット長は12bitだが、ウィンドウサイズは0xff0?
→ そのようです。
o ウィンドウは 0x00 での初期化でなく、05 にある文字で初期化?
→ そのようです。
o データ中に「2文字前より3文字コピー」といった感じのデータが含まれるが
この場合ウィンドウをリングバッファで実装するか、しないかで変わってくる。
→ LZ77の基本的テクニックでした。
「1文字前より10文字コピー」だってよし。
o 00-02 は n_data の上位?
o 圧縮を展開すると、すこしサイズが大きい。1byte大きい。
展開アルゴリズムがおかしい?
切り捨ててもいい?
---
藤井宏憲
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735