文字列/正規表現からuuidの16バイトバイナリ形式を取得するにはどうすればよいですか:
元:1968ec4a-2a73-11df-9aca-00012e27a270
乾杯、/マルシン
$bin = pack("h*", str_replace('-', '', $guid));
DCE で定義されている UUID の形式と文字列表現に関する章を正確に読んだ場合、UUID 文字列を単純に 16 進文字列として扱うことはできません。 UUID の文字列表現( Microsoft Developer Networkから参照) を参照してください。つまり、最初の 3 つのフィールドがビッグ エンディアン (最上位桁が最初) で表されるためです。
したがって、PHP 32 ビットを実行するリトル エンディアン システムで最も正確な (そしておそらく最速の) 方法は次のとおりです。
$bin = call_user_func_array('pack',
array_merge(array('VvvCCC6'),
array_map('hexdec',
array(substr($uuid, 0, 8),
substr($uuid, 9, 4), substr($uuid, 14, 4),
substr($uuid, 19, 2), substr($uuid, 21, 2))),
array_map('hexdec',
str_split(substr($uuid, 24, 12), 2))));
文字列をフィールドに分割し、16 進数表現を 10 進数に変換してから、pack
.
私はビッグ エンディアン アーキテクチャにアクセスできないため、これが機能するかどうか、またはpack
.