Comment puis-je calculer le CRC32 comme un entier signé en C#?

Je suis un développeur PHP et un peu hors de mon élément en C#. En PHP, il y a un crc32() la fonction qui renvoie un entier signé pour une chaîne que vous avez passé.

C'est ce que je suis:

<?php
echo crc32("test");
//displays -662733300

Je voudrais faire la même chose en C#. Je suis tombé sur cette bibliothèque de classes C# , mais de comprendre peu à ce sujet. Selon ses instructions, je suis censé le faire:

//first convert string to byte-array
String input = "test";
byte[] bytes = new byte[input.length * sizeof(char)];
System.Buffer.BlockCopy(input.ToCharArray(), 0, bytes, 0, bytes.Length);

//then calculate the value
Crc32 crc32 = new Crc32();
String output = "";
foreach (byte b in crc32.ComputeHash(bytes))
{
    output += b.ToString("x2").ToLower();
}

Qui me donne une sortie de la chaîne de 27d86d6a. Que dois-je faire à la place de retourner un entier signé? (Dans cet exemple, doit être égale à -662733300)

Plusieurs références à des .net crc calculatrices ici
pas sûr, mais autant que je sache, c'est la façon dont PHP a toujours été mis en œuvre (sur les machines 32 bits, de toute façon). Pour mes besoins, j'ai besoin de quelque chose qui va être en conformité avec ce comportement.
à partir du lien que vous avez posté: "Parce que PHP est de type entier signé de nombreux crc32 les sommes de contrôle entraînera des entiers négatifs sur les plates-formes 32 bits. Sur 64 bits installations crc32() les résultats seront des entiers positifs. Si vous avez besoin d'utiliser le "%u" formateur de sprintf() ou printf() pour obtenir la représentation de chaîne de la unsigned crc32() somme de contrôle en format décimal."

OriginalL'auteur soapergem | 2014-01-17