投稿日: May 29, 2019 9:25:15 AM
読み込み専用の仮想ファイルシステムみたいなものを作るとする。
データがあるポインタからある長さで存在している。その情報をまとめておくヘッダ情報が必要。
できればそこもバイナリにしてひっつけたいところ。なのだけど引っ付けるとちょっと厄介。
のでひとまずドライブ情報を扱うヘッダ用バイナリと実データを分けて考えることにする。
最終的にはヘッダの長さを先頭につけるなりして空間を分けて考えてやればいい。
で、そのヘッダ用バイナリについて。
まず名前付きリストで管理するとする。(本当はディクショナリというしっかりした名前があります)
head = { "data1":(0,1024), "data2":(1025,520) }
data1、data2 というバイナリが存在していてそれぞれ 0番地、1025番地から始まってる。長さはそれぞれ1024と520byteだよ。というような情報。
こいつをバイナリにする。
headbinary = str(head).encode()
headbinaryの中身はこう
b"{'data1': (0, 1024), 'data2': (1025, 520)}"
もととあんまり代わり映えしない気もするけど。まあバイナリになってます。
これでこんな風にバイナリファイルに書き出すことができる。
with open("header.bin", "wb") as f:
f.write(headbinary)
じゃあ次は元に戻す方法。
まず読み込み。
with open("head.bin", "rb") as f:
data = f.read()
これでdataにバイナリが入った。
ここからいままでの逆をやればよさそうだけどそうはうまく行かない。
とりあえずdecodeで文字までは戻せる。
文字からリストに戻せないので、その文字列をPythonにevalで解釈してもらう。
head = eval( data.decode() )
headの中身は?
{'data1': (0, 1024), 'data2': (1025, 520)}
はい、もとどおり。
で、情報を扱うには。普通に名前付きリストでの作法どおりにやる。
キーの一覧をどうにかするのがちょっと厄介。
そこで新しく配列をつくる。
key = []
for i in head.keys():
key.append(i)
keyを覗くと
['data1', 'data2']
こうなってる。