Zwei Byte-Array's mit XOR verknüpfen



  • Wie können am besten zwei Byte-Array's mit XOR verknüpft werden?
    Muss ich dazu eine Schleife laufen lassen?

    byte[] a = new byte[20];
    byte[] b = new byte[20];
    byte[] c = new byte[20];
    
    for (int i = 0; i < 20; i++)
      c[i] = a[i] ^ b[i];
    

    Gibt es eine Klasse für die Aufgabe?



  • Eine Klasse für zwei Zeilen Code - wäre wohl etwas übertrieben -)



  • Das mit der Klasse war schon Quatsch - stimmt schon.

    Ich habe aber gehofft das folgendes funktioniert:

    byte[] a = new byte[20];
    byte[] b = new byte[20];
    byte[] c = new byte[20];
    
    [i]//statt:
    //for (int i = 0; i < 20; i++)
    //  c[i] = a[i] ^ b[i]; [/i]
    
    c = a ^ b
    

    Wahrscheinlich nochmal Quatsch... 😕



  • Ja, der Operator ^ funktioniert nur für einfache Datentypen (nicht für Arrays).
    Aber kannst ja selber daraus eine Funktion basteln, falls du diese Operation öfter benötigst:

    byte[] Xor(byte[] a, byte[] b)
    {
      int nLen = Math.Min(a.Length, b.Length) // kleinere Länge ermitteln
      byte[] c = new byte[nLen];
    
      for (int i = 0; i < nLen; i++)
          c[i] = a[i] ^ b[i];
    
      return c;
    }
    

    Alternativ bei unterschiedlicher Länge beider Arrays dann mit Nullen auffüllen...

    P.S: Für die Klasse BitArray gibt es die Xor-Methode
    (ich nehme jedoch an, daß du den Xor-Operator für die Verschlüsselung benutzt, oder?)


Anmelden zum Antworten