如何在PHP中将MS生成的GUID转换为字节数组,将字节数组转换为GUID


How to convert MS generated GUID to byte array and byte array to GUID in PHP?

如何在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,...