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 < 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.
I'm a Software Developer, currently working at 
0 responses so far ↓
There are no comments yet...Kick things off by filling out the form below.
Leave a Comment