16 octets sous forme binaire de la représentation canonique uuid en php

StackOverflow https://stackoverflow.com/questions/2484267

  •  21-09-2019
  •  | 
  •  

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

Était-ce utile?

La solution

 $bin = pack("h*", str_replace('-', '', $guid));

emballez rel="noreferrer">

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top