Wie kann ich berechnen CRC32 als Ganzzahl mit Vorzeichen in C#?
Ich bin ein PHP-Entwickler und ein wenig aus meinem element in C#. In PHP gibt es eine crc32 () - Funktion gibt eine Ganzzahl für eine beliebige Zeichenfolge, die Sie übergeben.
Also das ist, was ich gewohnt bin:
<?php
echo crc32("test");
//displays -662733300
Möchte ich das gleiche in C#. Ich kam in diese C# - Klasse Bibliothek aber verstehen wenig davon. Nach seinen Anweisungen, ich bin, dies zu tun:
//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();
}
Dass gibt mir eine Ausgabe-string von 27d86d6a
. Was muss ich stattdessen tun, um wieder eine Ganzzahl? (In diesem Beispiel sollten gleich -662733300
)
Mehrere Verweise auf .Netto-crc-Rechner hier
nicht sicher, aber AFAIK ist das wie PHP schon immer hatte es implementiert ist (auf 32-bit Systemen sowieso). Für meine Zwecke brauche ich etwas, das in übereinstimmung mit dieser Verhalten.
aus dem link, den du gepostet hast: "Weil der PHP-Ganzzahl-signiert vielen crc32-Prüfsummen werden negative Ganzzahlen auf 32-bit-Plattformen. Auf 64-bit-Installationen alle crc32() Ergebnisse werden positive ganze zahlen obwohl. So müssen Sie das "%u" formatter von sprintf() oder printf() liefert die string-Darstellung der unsigned crc32() Prüfsumme dezimal-format."
nicht sicher, aber AFAIK ist das wie PHP schon immer hatte es implementiert ist (auf 32-bit Systemen sowieso). Für meine Zwecke brauche ich etwas, das in übereinstimmung mit dieser Verhalten.
aus dem link, den du gepostet hast: "Weil der PHP-Ganzzahl-signiert vielen crc32-Prüfsummen werden negative Ganzzahlen auf 32-bit-Plattformen. Auf 64-bit-Installationen alle crc32() Ergebnisse werden positive ganze zahlen obwohl. So müssen Sie das "%u" formatter von sprintf() oder printf() liefert die string-Darstellung der unsigned crc32() Prüfsumme dezimal-format."
InformationsquelleAutor soapergem | 2014-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, BitConverter.ToInt32 Methode:
BEARBEITEN
Es scheint, Sie verwenden unterschiedliche Crc32-Algorithmus-Implementierung, versuchen Sie Folgendes ein:
Demo
test
zurück1785583655
, aber soll es geben-662733300
Ok, siehe meine aktualisierte Antwort.
Dies ist absolut perfekt! Danke!!! (Und übrigens, ich vermute, Sie hat einige, die aus dem PHP-Quelltext?)
Ja, irgendwie 🙂
Sie können loszuwerden, die
BlockCopy
und verwendenbyte[] bytes = System.Text.Encoding.UTF8.GetBytes(input);
statt.InformationsquelleAutor Tony