hexToByte

Manchmal ist es schon erstaunlich wie lange man sich manchmal an den simpelsten Funktionen aufhalten kann. Aber “Konvertierungen” vom einen Datentyp in einen anderen sind mitunder schonmal trickreich.
Ich wollte einen String der Bytes als hexadezimalen Wert in der Form “abcde01″ repräsentiert in ein Byte-Array umwandeln. Zwei hexadezimale Ziffern stehen jeweils für ein Byte.
Umgesetzt habe ich das folgendermaßen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  private byte [] hexToByte(String hexStr)
  throws NumberFormatException {
    byte bArray[] = null;
    try {
      if (hexStr.length() < 2)
        throw new NumberFormatException(" Not long enough." +
            "At least two digits!");
      if (hexStr.length() % 2 != 0)
        throw new NumberFormatException(" Must be even.");
      // remove blanks
      hexStr.trim();
      int lengthOfKey = hexStr.length() / 2;
      bArray= new byte[lengthOfKey];
      for(int i=0; i &lt; lengthOfKey; i++) {
        int actValue = Integer.parseInt(hexStr.substring(2*i,2*i+2), 16); 
        bArray[i] = (byte) actValue;
      }  
    } catch (NumberFormatException e) {
      throw new NumberFormatException("Can't convert key hex value to byte " + 
          "array.\nReason: " + e.getMessage());
    }
    return bArray;
  }

Hintergrund ist folgender: Im KVA Praktikum sollten wir ein Programm schreiben, das für eine Eingabedatei und einen Schlüssel in oben beschriebener hexadezimaler Schreibweise einen MAC für die Datei berechnet.
Daher auch die verschiedenen Exceptions, die ausgelöst werden, wenn der String nicht mindestens zwei Zeichen hat und die Länge eine gerade Zahl ist.

DeliciousTwitterFacebookLinkedInRedditSlashdotTechnorati FavoritesDiggShare
This entry was posted in Java, Programming. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">