Problématique du jour:
Comment générer en PHP l'équivalent de ce que produit la classe DOTNET BinaryWriter ?
private static void WriteTofile(string blob, string filename)
{
using (FileStream stream = new FileStream(filename, FileMode.Create))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(blob);
writer.Close();
}
}
} |
Lorsque vous regardez avec un éditeur hexadécimal le résultat obtenu, vous notez que 2 octets sont rajoutés en début de chaine.
Ainsi, pour une chaine de longueur 460, le fichier commence par CC03.
Il faut l'interpréter de la façon suivante: "CC01" + 2, 2 étant le nombre d'octets rajoutés.
CC01 inversé donne 01CC qui est la valeur hexadécimale de 460.
Il ne reste plus qu'à implémenter cette fonction en PHP.
N'étant pas un expert en PHP, je l'ai implémenté de la façon suivante.
Il y a probablement plus simple, mais toujours est-il que l'exemple suivante fonctionne:
<?php
function hex2bin($str) {
$build = '';
while(strlen($str) > 1) {
$build .= chr(hexdec(substr($str, 0, 2)));
$str = substr($str, 2, strlen($str)-2);
}
return $build;
}
$Result = "H1FZt3ZEFwP+9bLvjLnIqQAjaM3wk0BxMZ1RFpSoKDXV1xaUPjL3obdx2";
$val = pack("v",strlen($Result));
echo hex2bin(dechex(hexdec(bin2hex($val)) +2)).$Result;
?>
|