Hello,
J'ai le même souci, le CRC donné en exemple ne me donne pas la même valeur avec la chaine d'entrée
Code PHP
function crc64($string)
{
$poly = (0xC96C5795 << 32) | 0xD7870F42;
$crc = 0;
for($i=0;$i<strlen($string);$i++)
{
$byte = ord($string[$i]);
for($bit=0;$bit<8;$bit++,$byte>>=1)
{
$crc = (($crc>>1)& ~(1<<63)) ^ ((($crc^$byte)&1)?$poly:0);
}
}
return $crc;
}
Code C
unsigned long long int crc64( const char* s )
{
unsigned long long int poly = 0xc96c5795d7870f42ULL;//(0xC96C5795ULL << 32) | 0xD7870F42ULL;
unsigned long long int crc = 0;
for ( size_t i=0 ; i< strlen(s) ; i++ )
{
unsigned long long int byte = s[i];
for ( size_t bit=0 ; bit<8 ; bit++, byte>>=1 )
crc = ((crc>>1) & 0x7fffffffffffffffULL) ^ ( ((crc^byte)&1)?poly:0 );
}
return crc;
}
int main()
{
printf("\n CRC = %016llx", crc64("161a653b38"));
return 0;
}
Néanmoins la fonction C me retourne CRC = 0x46c4478f73cd3b20 au lieu de 0x181c307118953949.
Comprends pas
