pythonでバイナリに文字列書き込み
Zip実装でお勉強中。
ヘッダー書くところの次で、ファイル名をバイナリに書き込もうとおもったけど
やりかたがなかなかわかりませんでした。
- 以下は、単純に struct.unpack の使い方です。
文字列を pack でバイナリ書き込みするときは
s で書き込みます。
ただし、H や L と違って s だけで指定だと 1 文字しかきこめません。
import struct f = open("hoge1.zip", "wb") f.write(struct.pack('<s', 'h')) f.close()
チュートリアルなどを読んだのですが、
連続する文字列を書き込む方法がよくわからなくて、
いろいろ試しました。
けっきょく、struct.pack('<5s', 'hoge.txt') のような指定でうまく行きました。
s は、単純にマルチバイト文字の文字数を表してるようなので、
len() で取得して、s をくっつけます。
さらに、s を指定するときは、リトルエンディアンの指定(<)がいらないことがわかりました。
こんなかんじ
filename = 'hoge.txt' filelens = str(len(filename)) + 's' f.write(struct.pack(filelens, filename))
とりあえず、ファイル名の書き込みまで。
次のバイナリの中身はなんだ!?