Willkommen bei Entwickler-Forum.
Ergebnis 1 bis 6 von 6
  1. #1
    Zaungast
    Registriert seit
    09.10.2017
    Beiträge
    23

    Standard 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. #2
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.284

    Standard

    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

  3. #3
    Stammgast
    Registriert seit
    11.12.2007
    Ort
    Waidring / Tirol
    Beiträge
    3.838

    Standard

    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
    Code Java:
    String str = new String(bytes, StandardCharsets.UTF_8);

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

  4. #4
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.284

    Standard

    Der Code wandelt die Bytes in Hexwerte um.
    Geändert von Christian Marquardt (13.02.2018 um 10:59 Uhr)
    Christian

  5. #5
    Zaungast
    Registriert seit
    09.10.2017
    Beiträge
    23

    Standard

    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.

  6. #6
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.284

    Standard

    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

 

 

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •