16 octets sous forme binaire de la représentation canonique uuid en php
Question
Comment puis-je obtenir 16 octets sous forme binaire de l'UUID de sa chaîne / représentation canonique:
ex: 1968ec4a-2a73-11df-9aca-00012e27a270
acclamations, / Marcin
La solution
$bin = pack("h*", str_replace('-', '', $guid));
Autres conseils
Si vous lisez avec précision le chapitre sur le format et la représentation d'une chaîne UUID telle que définie par DCE alors vous ne pouvez pas traiter la chaîne UUID naïvement comme une chaîne hexagonale, voir Représentation de chaîne UUID (qui est référencé à partir de la Microsoft Developer Network ). C'est à dire. parce que les trois premiers champs sont représentés dans le grand endian (chiffres les plus importants).
Ainsi, la manière la plus précise (et probablement le plus rapide) sur un petit système de endian 32bit PHP est:
$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))));
Il divise la chaîne dans les champs, transforme la représentation hexagonale en nombres décimaux, puis les Mangles par pack
.
Parce que je n'ai pas accès à une grande architecture endian, je ne pouvais pas vérifier si cela fonctionne ou on doit utiliser par exemple différents formats de type pour pack
.