質問

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

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

歓声、 /マーシン

役に立ちましたか?

解決

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

パックする

他のヒント

DCE で定義されている UUID の形式と文字列表現に関する章を正確に読んだ場合、UUID 文字列を単純に 16 進文字列として扱うことはできません。 UUIDの文字列表現 (これはから参照されています) マイクロソフト開発者ネットワーク)。つまり、最初の 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.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top