XOR Hex-String in JAVA unterschiedlicher Länge

8

Ich habe zwei Zeichenfolgen

%Vor%

Die Strings sind in hexadezimaler Darstellung. Ich möchte sie XORIEREN. XORing normalerweise Zeichen für Zeichen gibt das richtige Ergebnis für andere außer F XOR 6 . (Es gibt 112, sollte die Antwort 9 sein)

Bitte sagen Sie mir den richtigen Weg, um es in JAVA zu implementieren

EDIT: Umwandlung in int und xoring funktioniert. Aber wie xor wenn zwei Saiten unterschiedlich lang sind.

    
dejavu 23.03.2012, 14:11
quelle

4 Antworten

13

Anstatt die Unicode -Darstellungen zu XORIEREN, wandle einfach jedes Zeichen in die Zahl um, die es in Hexadezimalzahlen darstellt, XOR diese, und wandle es dann in Hex zurück. Du kannst immer noch das eine Zeichen gleichzeitig machen:

%Vor%

Beachten Sie, dass dies so lange funktionieren sollte, wie die Strings sind (solange sie dieselbe Länge haben) und Sie sich nie um negative Werte kümmern müssen - Sie erhalten immer nur das Ergebnis der XOR-Verknüpfung jedes Zeichenpaars.

    
Jon Skeet 23.03.2012, 14:16
quelle
4

Versuchen Sie Folgendes:

%Vor%

Warum speichern Sie Hexadezimalwerte als Zeichenfolgen? es wäre eine viel bessere Idee, Hexadezimalzahlen als Hexadezimalzahlen oder Longs darzustellen.

    
Óscar López 23.03.2012 14:16
quelle
2

Die Tatsache, dass es ein korrektes Ergebnis liefert, ist ein Artefakt der speziellen Zeichencodierung für Ziffern und Buchstaben. Sie sollten die Zahlen in BigInteger , XOR sie konvertieren und zurück in String :

konvertieren %Vor%

BEARBEITEN (als Antwort auf Jon Skeets Kommentar): Verwenden von BigInteger anstelle von int , um das Vier-Byte-Limit-Problem zu beheben.

    
dasblinkenlight 23.03.2012 14:15
quelle
0

Eine weitere Option, die abhängig von der Größe der Zeichenfolgen hilfreich sein kann

%Vor%     
Edwin Dalorzo 23.03.2012 14:32
quelle

Tags und Links