Announcement

Collapse
No announcement yet.

Frage in Bezug auf zu byte[] zu String umwandeln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Frage in Bezug auf zu byte[] zu String umwandeln

    Ich habe mal eine JAVA-Spezifische Frage. Ich habe einen MD5-Digest eines Strings als Bytearray. Laut einer Anleitung soll es nun möglich sein, das Ding in einen String umzuwandeln:

    Code:
    StringBuffer sb = new StringBuffer();
    
    for (int i = 0; i < byteData.length; i++) {
    
    	sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
    		
    }
    Ich verstehe nicht ganz, was hier: (byteData[i] & 0xff) + 0x100, 16 geschieht.

    Wieso das Bitwiese & und wieso miss man noch eine Hexadezimale addieren?

  • #2
    Ich verstehe nicht, was dein Code mit der Stringumwandlung zu tun hat, bzw. was damit bezweckt werden soll

    In einen String wandeln
    https://docs.oracle.com/javase/6/doc...ng/String.html

    ->siehe Konstructor String(byte[] bytes)
    Christian

    Comment


    • #3
      Hallo,

      wo hast du denn diesen Code her? Steht dort keine Beschreibung?

      Code:
      byteData[i] & 0xff
      0xff (hexadezimal für 255 dezimal) ist ein Bitfeld der Länge 8 und mit lauter 1. Durch das & (logische und Verknüpfung) mit byteData[i] wird diesen in den Zahlenbereich 0-255 gezwungen. D.h. die anderen Bits in byteData[i] werden einfach weggeschmissen. Das ist hier eher eine Sicherheitsmaßnahme als nach MD5 bytes unbedingt notwendig.

      0x100 (hexadezimal für 256) wird addiert.

      Das ,16 gehört zum Integer.toString und gibt dort an, dass das Interger-Argument als hexadezimal Zahl vorliegt.

      BTW: Für byte[] -> string gibt es auch
      [highlight=java]
      String str = new String(bytes, StandardCharsets.UTF_8);
      [/highlight]

      mfG Gü
      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

      Comment


      • #4
        Der Code wandelt die Bytes in Hexwerte um.
        Zuletzt editiert von Christian Marquardt; 13.02.2018, 10:59.
        Christian

        Comment


        • #5
          Die Addition ist also notwendig, um die korrespondierenden Hexwerte durch die Integer, toString() Methode erzeugen zu lassen, und dass die anderen Bits in byteData[i] werden einfach weggeschmissenwerden, soll so etwas wie einen Buffer Overflow verhindern, nehme ich an - obwohl dass doch eh überflüssig ist, da JAVA nur Arrays einer fest definierten Größe kompiliert, sonst "motzt" der Compiler.

          Comment


          • #6
            Nein, durch die Addition wird temporär ein größerer Datentyp erzeugt. ein Byte ist 1 Byte groß.
            Damit bei 9 -> 09 rauskommt -> führende Nullen
            Wesentlich eleganter ist

            sb.append(String.format("%02X", byteData[i]));
            Christian

            Comment

            Working...
            X