· Vincent Bourdon  · 2 min read

Équivalent de Pack et Unpack (php,perl) en .net

Je me suis lancer dans la conversion d'un petit projet PHP vers C , et je suis tombé sur une fonction qui m'était totalement inconnue à savoir unpack().

Je me suis lancer dans la conversion d'un petit projet PHP vers C , et je suis tombé sur une fonction qui m'était totalement inconnue à savoir unpack().

Je me suis lancer dans la conversion d’un petit projet PHP vers C#, et je suis tombé sur une fonction qui m’était totalement inconnue à savoir unpack(). Je vais vous partager le résultat de mes recherches sur ce sujet.

Il s’agit en fait de deux fonctions pack() qui compacte les arguments args dans un tableau d’octet binaire et unpack() qui fait l’inverse. Ces deux fonctions proviennent à la base de perl mais sont implémentées partiellement en php, (certain format ne sont pas supportés).

Vous pouvez chercher sur la MSDN vous ne trouverez aucun équivalent complet de ces deux fonctions. J’ai donc demandé à ma bible .net, Mister Jb Evain, si il en avait déjà entendu parlé et en deux minutes m’a sortie une classe existante dans le framework Mono Mono_DataConvert. Merci Jb :) Même si Miguel de Icaza et son équipe à fait du bon boulot, son implémentation reste cependant elle aussi incomplete.

Je vais essaye de vous donner un ensemble d’exemples avec le code php et sont équivalent .net.

Une chaîne complétée avec NULL

// PHP
$packed = pack("a10","fox" );
$unpacked = unpack("a10",$packed);
// C#
var packed = "fox".PadRight(10, '');
var unpacked = ASCIIEncoding.ASCII.GetString(pack, 0, 4);

Notez que la distinction entre signé et non signé n’affecte que la fonction unpack , tandis que la fonction pack fournira le même résultat pour les deux formats. De plus, notez que PHP enregistre de manière interne et intégrale les valeurs : cette représentation dépend de la machine. Si vous essayez d’enregistrer une valeur trop grande, elle risque d’être convertie et de donner lieu à des effets de bords vicieux.

Back to Blog

Related Posts

View All Posts »
Développez un problème tous les jours

Développez un problème tous les jours

En lisant le flux RSS de Scott Hanselman sur mon feedly préféré, je suis tombé sur un billet intéressant où Scott répond à un dev se demandant si il est vraiment développeur ou juste Googleur.