タグ

2015年4月10日のブックマーク (3件)

  • 梱包とPythonのStructモジュールを使用して可変長配列/文字列をアンパック -- IT専門質問の答え -- 彼山の知識

    struct モジュールは、固定長の構造をサポートしていません.可変長文字列の場合は、お使いのオプションは、以下のとおりです. 動的( str が bytes に渡す前に pack() に変換する必要があります)あなたのフォーマット文字列を構築する. s = bytes(s, 'utf-8') # Or other appropriate encoding struct.pack("I%ds" % (len(s),), len(s), s) struct スキップして、ちょうどあなたの pack() -ED出力に文字列を追加するには、通常の文字列のメソッドを使用します. struct.pack("I", len(s)) + s 開梱のために、あなただけの時のビットを解凍する必要があります. (i,), data = struct.unpack("I", data[:4]),

    nihohi
    nihohi 2015/04/10
    可変長文字列のpack/unpackの扱い
  • Python の struct モジュールでバイナリプロトコルを扱う

    世の中には (この文章を送り届けるのに使われている HTTP のように) テキストプロトコルが多いけど、たまにはバイナリプロトコルもある。 そんなバイナリプロトコルを Python でどう扱うかというと、標準ライブラリの struct モジュールを使う。 struct モジュールでは各種データを文字列データに相互変換して扱うことができる。 以下は 4 つの int 型の値を文字列データにパック・アンパックする例。 データをどのように変換するかはフォーマット文字列で指定する。 http://docs.python.jp/2/library/struct.html#struct-format-strings >>> import struct >>> struct.pack('!4i', 1, 2, 3, 4) '\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00

    Python の struct モジュールでバイナリプロトコルを扱う
  • Pythonの多次元リストの初期化 - greennoahの備忘録

    Pythonの多次元リストの作成方法について調べたので、自分用にメモ まずは、1次元リストの初期化 >>> map(lambda i:0, range(3)) [0, 0, 0] >>> [0]*3 [0, 0, 0]次に2次元リストの初期化<内包表記を使った場合> >>> a = [[0 for i in range(3)] for i in range(3)] >>> a [[0, 0, 0], [0, 0, 0], [0, 0, 0]]<*を使った場合> >>> b = [[0]*3]*3 >>> b [[0, 0, 0], [0, 0, 0], [0, 0, 0]]ここまでは、同じように内包表記、*を使った書き方、どちらとも同じ結果が得られます。 次に、要素[0][0]の値を1に変更してみましょう。<内包表記を使った場合> >>> a[0][0] = 1 >>> a [[1, 0,

    Pythonの多次元リストの初期化 - greennoahの備忘録
    nihohi
    nihohi 2015/04/10
    *を使って初期化すると、リストの要素が同じインスタンスを参照するので注意。