BMP忍者を解析してみました。 VRAMで見る時は-0x36のオフセットが掛かります。 -------------------------------------------------- □■□レベル4□■□ 解説: 生でデータを格納している。 取り出し方: そのまま テーブル: 00000036 | 1byte|忍者のレベル(0x03) 00000037 | 4byte|拡張子。恐らく4byteまで 0000003B | 4byte|DWORD型のファイルサイズ 0000003F〜 | |中身 VRAM: 00000000 | 1byte|レベル 00000001 | 4byte|拡張子 00000005 | 4byte|サイズ 00000009 | |中身 □■□レベル3□■□ 解説: 4bitで分解して(PINGUに似てる)格納。 簡単に言えば2倍に水増ししている。 取り出し方: ・2バイト読む ・1バイト目の下位4ビットを変数high、2バイト目の下位4ビットを変数lowへと読み出す ・highを4回左へビットシフトしてlowと論理和をとると1バイトが出来る ・以上の手順を最後まで繰り返す 例: 0D 0A → 00 0D 00 0A EF EF → 0E 0F 0E 0F テーブル: 00000036 | 1byte|忍者のレベル(0x02) 00000037 | 8byte|拡張子 0000003F | 8byte|サイズ 00000047〜 | |中身 VRAM: 00000000 00000001 00000009 00000011 □■□レベル2□■□ 解説: 2bit(4進数ね)x4で1byteを格納する形式。 要は1バイトを4倍に水増しする。 取り出し方: ・4バイト読む ・それぞれの下位2ビットを論理積とかで取り出す ・先頭から順に左シフトしたり足したりして1バイトを作る ・以上の手順を最後まで繰り返す 例: 0D 0A → 0031 0022 → 00 00 03 01 00 00 02 02 EF EF → 3233 3233 → 03 02 03 03 03 02 03 03 テーブル: 00000036 | 1byte|忍者のレベル(0x01) 00000037 |16byte|拡張子 00000047 |16byte|サイズ 00000057〜 | |中身 VRAM: 00000000 00000001 00000011 00000021 □■□レベル1□■□ 解説: 1bitx8で1byteを格納。 要は1バイトを8倍に水増ししている。 取り出し方: ・8バイト読む ・それぞれの下位1ビットを論理積とかで取り出す ・先頭から順に左シフトしたり足したりして1バイトを作る ・以上の手順を最後まで繰り返す 例: めんどい テーブル: 00000036 | 1byte|忍者のレベル(0) 00000037 |32byte|拡張子 00000057 |32byte|サイズ 00000077〜 | |中身 VRAM: 00000000 00000001 00000021 00000041