php中的16字节二进制形式的规范uuid表示

时间:2010-03-20 18:45:15

标签: php uuid

如何从字符串/规范表示中获取uuid的16字节二进制形式:

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

欢呼声, /马尔钦

2 个答案:

答案 0 :(得分:13)

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

pack

答案 1 :(得分:0)

如果您准确阅读了有关DCE定义的UUID的格式和字符串表示的章节,那么您不能天真地将UUID字符串视为十六进制字符串,请参阅String Representation of UUIDs(引自{ {3}})。 即因为前三个字段用大端表示(最重要的数字是第一个)。

因此,运行PHP 32bit的小端系统上最准确的方式(可能是最快的)是:

$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))));

它将字符串拆分为字段,将十六进制表示形式转换为十进制数字,然后将它们通过Microsoft Developer Network进行修改。

因为我无法访问大端架构,所以我无法验证这是否有效或者是否必须使用例如pack的不同格式说明符。