Merci pour ta réponse, ça fait 3 semaines que je cherche et c'est lui qui propose ce dont j'ai besoin, j'ai donc vraiment besoin de savoir utiliser sa librairie à lui.Le mieux c'est que tu contactes l'auteur de cette librairie.
Mais utiliser une lib qui n'est pas du tout documentée en étant débutant, c'est une très très mauvaise idée.
Essaye de voir si tu ne peux pas utiliser une autre librairie qui serait + adaptée à ton niveau :
https://github.com/search?l=PHP&q=crc&type=Repositories
Google a par exemple une librairie avec un minimum de doc et un exemple de comment l'utiliser :
https://github.com/google/php-crc32
Code : Tout sélectionner
<?php
$brut = "\xa"; // le hash de ça est correct c'est a dire 399F7B69
$premiere = '"\x'. dechex(10) .'"'; // affiche dd36db2f qui est incorrect
$deuxieme = "\x". dechex(10); // affiche c0ccc3a8 donc incorrect
echo hash('crc32c',$deuxieme, false);
echo "<br> $premiere";
echo "<br> $deuxieme";
?>$string = hex2bin('0'.dechex(10));
hash('crc32c', $string);Code : Tout sélectionner
$strven = "0x0A, 0x01, " .$venname. "0x00";
$venlen = preg_replace($patterns, $replacements, $strven);
$vendiv = strlen($venlen) / 2; // byte lentgh
$strdev = "0x0A, 0x01, " .$devname. "0x00";
$devlen = preg_replace($patterns, $replacements, $strdev);
$devdiv = strlen($devlen) / 2; // byte lentgh
$div2 = dechex($division);
$vendiv2 = dechex($vendiv);
$devidiv2 = dechex($devdiv);
// il faut des guillmets " " pour que la valeur soit correctement affiché à la sortie, les 0x0 des dechex peuvent poser problème.
$inputhex = "\x01\x$div2\x00\x01\x00\x0D\x00\x01\x00\x08\x81\x8$TBBID\x02\x8$TBBID\x00\x00\x00\x08\x82\x9$TBBID\x01\x8$TBBID\x00\x00\x00\x08\x83\x8$TBBID\x04\x8$TBBID\x01\x00\x00\x08\x84\x9$TBBID\x03\x8$TBBID\x01\x00\x00\x05\x85\x50\x00\x00\x05\x86\x50\x00\x00\x02\x87\x0B\x88\x20\x01\x00\x64\x00\x00\x00\x00\x00\x03\x89\x80\x05\x8A\x50\x40\x00\x05\x8B\x50\x40\x00\x0$vendiv2\x01$ven2\x00\x$devidiv2\x02$dev2\x00";
$bytB = "0x0". "$byt2$byt3$byt4$byt5$byt6$byt7$byt8$byt9";
echo $inputhex . "<br>";
echo hash('crc32c', $inputhex, false);
?>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<br>$string = hex2bin('0'.dechex(10));
hash('crc32c', $string);
à tester pas sur que ce soit 100% fiable.$string = '\xa';
hash('crc32c', $string);
$string = '\x'.dechex(10);
hash('crc32c', $string);Code : Tout sélectionner
<?php
echo dechex(10) . "<br>"; // = a
echo dechex(11) . "<br>"; // = b
$string1 = hex2bin('0'.dechex(10));
$string2 = hex2bin('0'.dechex(11));
$string3 = "\xa";
echo hash('crc32c', "\xa"); // = 399f7b69 = ok
echo hash('crc32c', "xa"); // = 4081708c = incorrect
echo hash('crc32c', $string1); // ok
echo hash('crc32c', $string2); // ok
echo hash('crc32c', $string3); // ok
?>hex2bin('0'.dechex(10)); // = 1010
echo hash('crc32c', "1010"); // = 598a0112 = pas bon
$string = '\xa';// \xa
hash('crc32c', $string);
$string = '\x'.dechex(10);// \xa
hash('crc32c', $string);
dechex(10) = a = \x61 qui est différent de \xa...$string = "\x61";// a
hash('crc32c', $string);
$string = dechex(10);// a
hash('crc32c', $string);
voici ce que ça donne:J'ai encore édité mon commentaire précédent. Le 0 c'est pas bon. C'est juste qu'en faisant une conversion bin2hex("\xa") tu obtiens 0a et donc en faisant un hex2bin('0a') tu obtiens bien la même chaine qu'avec "\xa". Mais ça fonctionne dans ce cas particulier seulement.
Pour moi le problème est que tu compares des choses différentes. Je sais pas si ça résout vraiment ton problème mais il suffit dans ce cas que tu n'utilises pas les double quotes sur la valeur de départ, ainsi tu obtiendras bien le même hash :dechex(10) = a = \x61 qui est différent de \xa...$string = '\xa';// \xa hash('crc32c', $string); $string = '\x'.dechex(10);// \xa hash('crc32c', $string);
En revanche ce code est bon :$string = "\x61";// a hash('crc32c', $string); $string = dechex(10);// a hash('crc32c', $string);
Bref, tu ne peux comparer que ce qui est comparable et tout cela est très confus.
PS : et théoriquement étant donné que tu utilises une conversion dechex, la sortie de la fonction est donc sensée être hexadécimal et tu ne devrais donc pas ajouter de \x devant pour la convertir en hexa puisqu'elle est déjà hexa.
Code : Tout sélectionner
<?php
// resultat correct 399F7B69
$string = '\x'.dechex(10);// \xa
echo hash('crc32c', $string); // = c0ccc3a8 = pas bon
$string2 = dechex(10);// a
echo "<br>" . hash('crc32c', $string2); // = c1d04330
$string3 = "\x61";// a
echo "<br>" . hash('crc32c', $string3); // = c1d04330
$string4 = dechex(10);// a
echo "<br>" . hash('crc32c', $string4); // = c1d04330
?>