バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-network-backnumber/
はじめに
Vector社BLFの中のzlib圧縮の抜き出し方法
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
プログラミング言語は何にする?
じゃー、今回から、BLFを展開するプログラムを考えていく!
ちなみに使用するプログラミング言語は何にするの?
最初はzlibの都合でC言語にしようかと思ったんだよねー。
以前、zlibを使ったことがあって、その時はC言語だったんで。
その口ぶりだとC言語以外を使うつもりみたいだね。
うん。
Python使おうと思う。
あれ?
なんかやたらとPython使うこと多くない?
いやー。
結局いろいろなジャンルを横断しようとするとPythonが強いんだよねー。
zlibの展開もPythonだと一行で終わる。
へー。
それは楽そうだ。
あとは、配列の一部を抜き取るスライシングとか
かなり便利なんだよねー。
プログラム作成方針
じゃー、もう一撃で作れる感じか。
一撃ってわけにはいかないかなー。
とりあえず、以下の手順を想定。
①BLFからオブジェクトを抜き出して、zlibで回答したものを1ファイルに連結。
②そのファイルを解析。
③そのファイルをいい感じにCANやEthernetのフレームを抜き出してテキスト化。
あれ?②でまた解析するの?
まぁzlibから解凍したものがこちらの想定通りかの確認ができてないんだよねー。
そこを確認した上で追加のプログラムを考える感じ。
なるほど。
確かにその方が確実かも。
Pythonでzlib解凍方法
ちなみに、Pythonでzlib解凍ってどんな感じになるの?
こんな感じになるね。
import zlib
f = open("input_file", 'rb')
input_file = f.read()
f.close()
# zlib解凍
decompress_data = zlib.decompress(input_file)
f = open("output_file", 'wb')
f.write(decompress_data)
f.close()
あー。
コメントの「zlib解凍」ってとこの一行が解凍してるとこなのか。
たしかに楽そう。
C言語だと、zlibを使う前の初期化処理とかあってやや複雑なんだけどね。
ホント良い時代になったよー。
(フクさんって一体いくつ?そもそもフクロウの寿命とか知らんけど)
とりあえず、次回までにざっとオブジェクト抜き出しとzlib解凍のPythonコード書いてくるよ。
はーい。
まとめ
まとめだよ。
- BLF解凍用の言語はPythonを採用
- zlibとか配列の制御が楽ちん。
- zlib解凍後のデータはまだ全貌がつかめていないので、改めて再調査予定。
バックナンバーはこちら。
コメント