如何在MS中将MS生成的GUID转换为字节数组和字节数组到GUID?

时间:2014-07-28 06:36:17

标签: php

如何在MS中将MS生成的GUID转换为字节数组和字节数组到GUID?

PHP中是否有预定义的类?

GUID的示例是9FA6DFE3-484C-4451-A552-781E23D0476F。

2 个答案:

答案 0 :(得分:2)

该格式的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转换为带有无符号字节值的整数数组,而不是严格意义上的字节数组,并且字符串表示不会插入破折号,如果需要,您必须添加破折号。

An IDEone for testing

答案 1 :(得分:0)

$guid_byte_order中存在错误,应交换字节6和7;正确的顺序是[3,2,1,0,5,4,7,6,8,9,10,...