Java String in Hexa: Abstände,Absätze

Xerxes18

Lieutenant
Registriert
Aug. 2008
Beiträge
700
Hallo nochmal,

ich würde gerne wissen, wie ich das Auslesen der Leerzeichen und Absätze in diese Methode einbauen kann:



Da die toString Methode alles nach der Reihe einfach ausgibt, weiß ich schonmal dass ich da etwas ändern muss. Aber was, weiß ich leider nicht genau :D

Später wird ein TextArea hinzugefügt, also sowas:

Code:
String ta= stringToHexa(Klasse1.textArea.getText())

Vielen dank nochmals im voraus :)
 
Zuletzt bearbeitet:
Bin zwar auch noch kein Profi und lasse mich auch eines besseren belehren..

Folgendes fällt mir auf:
- Der Umweg über ein Char-Array.. Von String gibts eine schöne Methode mit String.charAt() die du in deiner Schlaufe verwenden könntest.. da brauchst du nicht extra ein char-array.. aber geht natürlich auch..

- Ich würde die Validierung am Anfang machen. Sowas in der Art:
PHP:
str = str.replaceAll("^\\p{XDigit}", "");
Filtert alles raus, was nicht Hex ist..

jetzt bin ich mal gespannt was andere schreiben.. :)
 
Zuletzt bearbeitet:
Also ich habe einfach mal in so einem online umrechner geguckt und das Zeichen wo ein leerzeichen ist, ist immer "20" und da wo ein Absatz ist ist immer ein "da"

Das Problem ich kriege nur eines davon rein :


habe einfachmal dahinter auch ein replaceAll( "da", "\n") gesetzt nur macht er den Absatz nicht :(

EDIT:

So habe jetzt etwas herausgefunden. Er ersetzt das "da" nicht. Irgendwie macht er draus nur ein "a". Wenn ich dann nochmal das "a" durch "\n" ersetzte macht er endlich ein Absatz, aber das a wird ja benötigt in manchen kombinationen :(
 
Zuletzt bearbeitet:
hmm, ich glaube das war mein Fehler.

Bei folgendem Code-Stück von dir machst du ja einen Type-cast:
PHP:
sb.append(Integer.toHexString((int) ch[i]));
Java muss aber auch wissen als was es das jeweilige Zeichen ausgeben soll. Deshalb nimmt es die Ascii-Tabelle:
http://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange#ASCII-Tabelle
Auch wenn du einen Integer in einen Character transformierst wird diese Tabelle benutzt..

Das replaceAll macht aber nichts dergleichen. Es sucht einfach in deinem String nach Vorkomnissen des ersten Strings und ersetzt es mit zweiterem.
Versuche also mal:
return sb.toString().replaceAll("\n", " ");
Die 20 kommt ebenfalls aus dieser Ascii-Tabelle. Hexadezimal 20 steht für ein Space (Leerzeichen)

Was genau versuchst du zu machen ? Die Leerzeichen und Absätze suchen und mit was ersetzen ?
 
Ich versuche den Code so darzustellen, wie er geschrieben wurde, damit an vergleichen kann, welches Wort zu welchem Code zugeordnet werden kann.
 
Wäre es dann nicht einfacher wenn du innerhalb deiner For-Schleife eine einfache IF-Abfrage machst, die nach diesen beiden Zeichen ("\n"," ") fragt und falls diese im aktuellen Char drin sind gar nicht mit Hex formatierst sondern direkt an den String anhängst ? Jedes andere Zeichen kann dann in die Methode Integer.toHexString.
Wäre super wenn du mal den Code posten könntest, oder ist der obige aus dem 1. Post noch aktuell ? (Dort gäbe es meiner Ansicht nach noch ein Problem mit dem casten und dem formatieren in den Hex-Wert..)
 
Hi nochmal,

also ich habe jetzt ein sehr seltsames Problem:

Vorher hat er noch das "da" geschrieben natürlich ohne replaceAll();
Nachdem ich das replaceAll() weggemacht hatte (also so wie ganz am Anfang) macht der trotzdem nur das "a" hin. Ich kriege das "da" nicht mehr hin !!!

Das Space macht er ohne Probleme (also die 20) aber das "da" nicht.

Was zur Hölle passiert da?
 
Wie sieht denn ein konkretes Beispiel für einen String aus, das der Methode übergeben wird? So wie du replaceAll() verwendest, müsste "20" im Text stehen. Mir sieht das aber eher danach aus, als ob die 20 der ASCII Wert wäre, also grade kein String sondern ein hexadezimaler Wert.
 
Zuletzt bearbeitet:
Im textArea gebe ich immer als test:

Code:
hallo
ich

ein und heraus kommt immer : 68616c6c6fa696368

Da fehlt definitiv noch vor dem "a" das "d" obwohl ich im moment garnichts ersetze!

Ihr könnt mal unter folgendem Link:

http://www.string-functions.com/hex-string.aspx

den oben genannten Wert eingeben und einmal den mit einem d vor dem a und ihr werdet sehen, dass es da zu einem Fehler kommt!

Wie gesagt macht er die 20 ganz normal aber warum macht er das "da" nicht mehr? Habe ich etwa, als ich mit dem replacen angefangen habe den ASCII von JAVA beschädigt oder so?
 
@Xerxes18

Machst du auch irgendwas selber? Manchmal kommt man auch von ganz alleine auf die Loesung. Dazu muss man aber mal etwas Zeit investieren und nicht fuer jedes kleine Problem einen Thread eroeffnen.
 
Nein, du hast nichts damit beschädigt.

Das "d" was du meinst ist ein Carriage return, entspricht dem char '\r' oder Hexadezimal 0d. Das "a" kommt von '\n' Line Feed und wird mit 0a encodiert. Windows benutzt soweit ich weiß \r\n als Umbruch, was dann "da" entspricht in Hex. Nur "a" bedeutet da steht ein \n.
Probier's mal so mit "hallo\r\nich" als String, dann solltest du dein "da" wieder bekommen.

Ist das eine Hausaufgabe?
 
@toxn:

tut mir leid, dass ich mich melde, wenn ich ein Problem habe, dachte das wäre ein Forum, wo man so ein "kleines Problem" nicht als ein "großes Problem" sieht. Wenn es ein "kleines Problem" ist, dann kennst du warscheinlich auch schon die Lösung. Wäre echt hilfreich, wenn du etwas dazu beitragen könntest.

@samotyr:

Ich habe es auch mal mit "hallo\r\nich" ausprobiert, leider klappt das nicht, weil er das nicht als Absatz ansieht sondern wandelt das "\", "r", etc. in Hexa um.

Wie gesagt trat das Problem auf, als ich versucht habe das "da" durch ein "/n" zu ersetzen. Ab dann hat er das "da" nicht mehr geschrieben. Also vorher hat er definitiv ein "da" geschrieben, weil sonst hätte ich nciht versucht ein "da" zu ersetzen :(
 
Ich habe das Problem gelöst! (extra für toxn: Und das alleine!)
 
Dann wäre es schön, wenn du deine Lösung auch hier beschreibst. Vielleicht haben andere ähnliche Schwierigkeiten und finden dann, auf der Suche nach Lösungen, diesen Thread.
 
Ja die Lösung war eigentlich ganz Simpel, ich habe bevor der Text in die Methode geht alle "\n" durch "\r\n" ersetzt und dann war es das eignetlich auch schon.

Bevor ich hier ein neuen Thread aufmache, wüsste ich gerne warum es keine Möglichkeit gibt diese HexaZahlen wieder umzukehren!?

Es gibt zwar Integer.toHexString() aber warum nicht umgekehrt?

ich habe im moment nämlich das Problem, dass ich die nicht zurückumwandeln kann, wie mache ich das?
 
Meinst du ich hätte das hier geschrieben, wenn ich etwas gescheites gefunden hätte?

Naja ich habs am ende doch noch geschafft, hatte einen kleiner Feher :)
 
Zuletzt bearbeitet:
Xerxes18 schrieb:
Ich habe das Problem gelöst! (extra für toxn: Und das alleine!)

Das freut mich. Ich wollt dich nicht anfahren oder Aehnliches, aber du beweist gerade selber, dass Eigeninitiative bei kleineren Problemen schnell zum Ziel fuehren kann und der Lerneffekt ist auch ein anderer.
 
Zurück
Oben