【Ethernet】車載ネットワーク その7【BLFファイル⑦】

車載ネットワーク

バックナンバーはこちら。
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解凍後のデータはまだ全貌がつかめていないので、改めて再調査予定。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました