小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

バイナリ構造体とは

バイナリ構造体とは、ある一塊のバイナリデータ(0と1の状態)とイコールみたいです。
Perlでのバイナリ構造体とは、pack関数のリターン値のことです。
pack関数は、第二引数のリスト値を、第一引数のテンプレートに従って、バイナリ構造体(リターン値)に変換します。


たとえば、以下は2進数文字列『"1111"』を、テンプレート『"B"等』に従って、バイナリ構造体に変換しています。
各行の右側のコメントは、単なるprint結果でなく、バイナリ構造体の中を16進数で表したものです。

$strbin = "1111";
print $strbin;                                            # 31313131
print pack("B", $strbin), "\n";                           # 80
print pack("B*", $strbin), "\n";                          # F0
print pack("B32", $strbin), "\n";                         # F0000000
print pack("b", $strbin), "\n";                           # 01
print pack("b*", $strbin), "\n";                          # 0F
print pack("b32", $strbin), "\n";                         # 0F000000
print pack("B*", substr("0" x 32 . $strbin, -32)), "\n";  # 0000000F
print pack("B32", substr("0" x 32 . $strbin, -32)), "\n"; # 0000000F

ちなみに、2進数文字列を10進数文字列に変換するには、以下の感じです。

print unpack("N", pack("B32", substr("0" x 32 . $strbin, -32))); # 3135