ich möchte einen String in einen hexadezimalen String konvertieren (das klappt auch) und anschließend in einen Long umwandeln.
Das klappt allerdings nicht.
Java:
publicstaticStringstringToHex(String base){StringBuffer buffer =newStringBuffer();int intValue;for(int x =0; x < base.length(); x++){int cursor =0;
intValue = base.charAt(x);String binaryChar =newString(Integer.toBinaryString(base.charAt(x)));for(int i =0; i < binaryChar.length(); i++){if(binaryChar.charAt(i)=='1'){
cursor +=1;}}if((cursor %2)>0){
intValue +=128;}
buffer.append(Integer.toHexString(intValue)+" ");}return buffer.toString();}publicstaticlongHextoLong(String s){long num =0;try{BufferedReader bf =newBufferedReader(newStringReader(s.substring(0,16)));String hex = bf.readLine();
num =Long.parseLong(hex,16);}catch(IOException e){
e.printStackTrace();}return num;}publicstaticvoidmain(String[] args){String s ="The cat in the hat";System.out.println(s);System.out.println(stringToHex(s));long m =HextoLong(stringToHex(s));System.out.println(m);}
Also die Methode HextoLong funktioniert nur für Zahlen, aber nicht für Hexadezimale Strings.
du postest vorbildlich ein Komplettprogramm mit main-Methode, welches direkt zum Fehler führt,
ich korrigiere den Fehler und nun meldest du ein neues Problem mit diffusen, für mich jedenfalls nicht nachvollziehbaren Umständen und ohne Beispiel-Code oder vergleichbares,
liegt hier nicht ein systematischer Forum-Fehler vor?
oder meinst du dass das erste Programm noch Fehler liefert?
Java:
publicclassTest{publicstaticStringstringToHex(String base){StringBuffer buffer =newStringBuffer();int intValue;for(int x =0; x < base.length(); x++){int cursor =0;
intValue = base.charAt(x);String binaryChar =newString(Integer.toBinaryString(base.charAt(x)));for(int i =0; i < binaryChar.length(); i++){if(binaryChar.charAt(i)=='1'){
cursor +=1;}}if((cursor %2)>0){
intValue +=128;}
buffer.append(Integer.toHexString(intValue)+" ");}return buffer.toString();}publicstaticlongHextoLong(String s){long num =0;try{BufferedReader bf =newBufferedReader(newStringReader(s.substring(0,16)));String hex = bf.readLine();System.out.println("hex: "+hex);
hex = hex.replaceAll(" ","");System.out.println("hex: "+hex);
num =Long.parseLong(hex,16);System.out.println("num: "+num);}catch(IOException e){
e.printStackTrace();}return num;}publicstaticvoidmain(String[] args){String s ="The cat in the hat";System.out.println(s);System.out.println(stringToHex(s));long m =HextoLong(stringToHex(s));System.out.println(m);}}
bei mir fehlerlos
Code:
The cat in the hat
d4 e8 65 a0 63 e1 74 a0 69 ee a0 74 e8 65 a0 e8 e1 74
hex: d4 e8 65 a0 63 e
hex: d4e865a063e
num: 14630912656958
14630912656958
wobei man sich natürlich schon fragen kann, ob nicht z.B erst die Leerzeichen entfernt und dann 16 Zeichen abgeschnitten werden sollten
ich führe einfach nur die main methode aus und dabei kommt jedesmal die Fehlermeldung:
java.lang.NumberFormatException: For input string: "d4e86563e17469ee"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Long.parseLong(Long.java:422)
at Threefish.hextoLong(Threefish.java:49)
at Threefish.main(Threefish.java:92)
Der Fehler war damit nicht korrigiert! Weil das anscheinend nicht der Fehler war...
edit:
ich meinte das erste Programm natürlich. Komisch bei mir kommt diese Fehlermeldung
frech frech, meine Verbesserung an anderer Stelle einzubauen und dann weitere Fehler in deinem Programm so zu bewerten als wäre meine Hilfe nicht hilfreich
neues Spiel, diesmal nur ein Hinweis:
Java:
s = s.replaceAll(" ","");BufferedReader bf =newBufferedReader(newStringReader(s.substring(0,15)));// 15 ist weniger als 16String hex = bf.readLine();// wieso nicht eigentlich direkt s.substring()?System.out.println("hex: "+ hex);
num =Long.parseLong(hex,16);System.out.println("num: "+ num);System.out.println("max: "+Long.MAX_VALUE);
das Problem ist, dass es hier wieder um ein Kryptosystem geht und damit, wenn ich die Leerzeichen vorher entferne, die zu verschlüsselnde Nachricht verfälsche...
dann bietet sich eine Umwandlung in Long also nicht an?
oder wenn du am Ende selber wieder einen String aus dem Long machst, dann denke dir irgendwas passendes aus,
z.B. die Regel dass nach je zwei Buchstaben in String wieder ein Leerzeichen rein muss