如何从字符串/规范表示中获取uuid的16字节二进制形式:
例如:1968ec4a-2a73-11df-9aca-00012e27a270
欢呼声, /马尔钦
答案 0 :(得分:13)
$bin = pack("h*", str_replace('-', '', $guid));
答案 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
的不同格式说明符。