タグ

unpackに関するkamipoのブックマーク (4)

  • packとunpack | ブーログ

    perlphpにあるpack,unpack関数はシリアライズとデシリアライズを行う関数です。シリアライズとは数値や文字列をバイナリ表現にすることで、デシリアライズはその逆です。シリアライズしたデータはネットワークに送ったり、保存したりしやすくなります。しかしシリアライズには常にいろいろな問題が付きまといます。 文字列をpackする。 文字列をpackするには常に長さを固定して行います。以下の例は長さ10バイトでpackします。 $str = "abcd"; $b = pack("a10", $str); “a10″のaは文字列を表し、10は長さを指定します。$strが10バイトより短ければ、残りの部分はnullでうめられます。”a10″の代わりに”A10″とすればスペースで埋められます。 文字列をunpackする。 $str = "abcd"; $b = pack("a10", $s

  • 『PHPのunpack関数を活用する』

    PHPでバイナリデータを扱いたい場合、pack/unpack関数を使うと便利です。 しかし、マニュアルにはあまり詳しい使い方が書かれていないので、unpack関数、特に書式コードをどう使えばいいか解りにくいのが難点です。ネットで検索してもあまり纏まった記事も見つかりませんでした。 そこで、PHPのunpack関数を利用してバイナリファイルを読み込む際に調べた事をまとめてみました。 基的に以下の4つを繰り返します。 1.フォーマットコード PHPマニュアル参照 2.繰り返し回数(1回のみなら省略可能) 0:   スキップされる 1~: 指定回数繰り返す *:   データの末尾まで繰り返す 3.配列のキー(省略可能) ・数字で始まるキーは使用できない(直前の繰り返し数と区別ができないため?)。 ただし、繰り返し数が*の場合は数字を利用可能。 例1: unsigned char型、繰り返し数2

    『PHPのunpack関数を活用する』
  • pack関数とunpack関数の基本を理解する - 小池啓仁 ヒロヒト応援ブログ By はてな

    一般的に、packは包み込むことで、unpackはその逆です。 Perlでのpack関数は、リスト値を型指定で包み込んで、バイナリ値に変換します。unpack関数はその逆です。 バイナリ値とは、たとえば、見た目『123』は、内部的には16進の『313233』で、バイナリ値です。 つぎに、リスト値『313233』を16進上位ニブル型指定("H*")でパックしてみます。 すると、見た目バイナリ値が『123』になるのです。 print pack("H*", 313233); #内部的には16進の『313233』である見た目バイナリ値『123』が表示される つぎに、見た目バイナリ値『123』を16進上位ニブル型指定("H*")でアンパックしてみます。 すると、リスト値『313233』が表示されます。 print unpack("H*", 123); #リスト値『313233』が表示される 尚、16

    pack関数とunpack関数の基本を理解する - 小池啓仁 ヒロヒト応援ブログ By はてな
  • Perl の数値変換

    Last Updated: 2002/03/26 Perl で、16進文字列、10進整数、2進文字列、バイナリー文字列の相互変換を行うための、スクリプトメモです。 特に断っていない限り、Perl 5.001 以上で動作します。 目次 16進文字列からの変換 10進整数からの変換 2進文字列からの変換 バイナリー文字列からの変換 16進文字列→10進整数への変換 hex() 関数は、16進文字列を整数値に、手軽に変換できます。 $num10 = hex("4A"); # $num10 には 74 が入る $num10 = hex("FFFFFF"); # $num10 には 16777215 が入る 余談ですが、数値リテラル中では 0x に続けて 16 進数で記述することで、数値を表すことができます。 $num10 = 0x4A; # 74 $num10 = 0xFFFFFF; # 1677

  • 1