如何从字符串/规范表示中获取 uuid 的 16 字节二进制形式:
前任:1968ec4a-2a73-11df-9aca-00012e27a270
干杯,/马辛
$bin = pack("h*", str_replace('-', '', $guid));
如果您准确阅读了有关 DCE 定义的 UUID 的格式和字符串表示的章节,那么您不能天真地将 UUID 字符串视为十六进制字符串,请参阅UUID 的字符串表示(从Microsoft 开发人员网络中引用)。即因为前三个字段以大端表示(最高有效位在前)。
因此,在运行 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))));
它将字符串拆分为字段,将十六进制表示转换为十进制数字,然后通过pack
.
因为我无法访问大端架构,我无法验证这是否有效,或者必须使用不同的格式说明符,例如pack
.