如何在MS中将MS生成的GUID转换为字节数组和字节数组到GUID?
PHP中是否有预定义的类?
GUID的示例是9FA6DFE3-484C-4451-A552-781E23D0476F。
答案 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转换为带有无符号字节值的整数数组,而不是严格意义上的字节数组,并且字符串表示不会插入破折号,如果需要,您必须添加破折号。
答案 1 :(得分:0)
$guid_byte_order
中存在错误,应交换字节6和7;正确的顺序是[3,2,1,0,5,4,7,6,8,9,10,...