10

文字列/正規表現からuuidの16バイトバイナリ形式を取得するにはどうすればよいですか:

元:1968ec4a-2a73-11df-9aca-00012e27a270

乾杯、/マルシン

4

2 に答える 2

16
 $bin = pack("h*", str_replace('-', '', $guid));

パック

于 2010-03-20T18:59:25.093 に答える
0

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.

于 2015-01-21T21:15:38.337 に答える