如何在PHP中将MS生成的GUID转换为字节数组和字节数组到GUID ?
在PHP中有任何预定义的类吗?
GUID示例:9FA6DFE3-484C-4451-A552-781E23D0476F
该格式的Guids转换起来有些棘手,因为它们的字节顺序与显示格式不一样。一个翻译表使它相当直接;
function guid_to_bytes($guid) {
$guid_byte_order = [3,2,1,0,5,4,6,7,8,9,10,11,12,13,14,15];
$guid = preg_replace("/[^a-zA-Z0-9]+/", "", $guid);
$result = [];
for($i=0;$i<16;$i++)
$result[] = hexdec(substr($guid, 2 * $guid_byte_order[$i], 2));
return $result;
}
function bytes_to_guid($bytes) {
$guid_byte_order = [3,2,1,0,5,4,6,7,8,9,10,11,12,13,14,15];
$result = "";
for($i=0;$i<16;$i++)
$result = sprintf($result."%02x", $bytes[$guid_byte_order[$i]]);
return $result;
}
请注意,这将guid转换为具有无符号字节值的整数数组,而不是严格意义上的字节数组,并且字符串表示不插入破折号,如果需要的话,您必须添加破折号。
用于测试的IDEone。
在$guid_byte_order
中有一个错误,应该交换字节6和7;正确的顺序是:[3,2,1,0,5,4,7,6,8,9,10,...