"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

[Java] Byte-Array To String?

prayerslayer 10.05.2006 - 10:43 76185 7
Posts

prayerslayer

Oar. Mh.
Avatar
Registered: Sep 2004
Location: vorm Sucher
Posts: 4073
hi 5.

hab wieder ein java-problem, diesmal anderer natur. ich brauch eine funktion, die mir ein byte[] in einen string castet. aber nicht so, dass dann das bytefeld als string drinsteht, sondern das, was das bytefeld bedeutet.

ungefähr klar, was ich meine? weil bis jetzt bekomm ich immer nur crap a la "[B@b82368" und so raus, es sollt aber ein wort dastehen :(

bütte helfen :(

ps: hab grad von meinem lehrer gehört, dass ich das bytefeld zuerst in einen hexstring kriegen muss. hat wer einen link zu einem framework/package, das eine klasse "HexString" drin hat? hab mit google auf die schnelle nix angefunden :(

//edit: hab hier bei opensourcefinland.org was gefunden, mit dem ergebnis bin ich aber trotzdem nicht zufrieden :(
Bearbeitet von prayerslayer am 10.05.2006, 13:20

gue

Addicted
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
Suchst du das?
Zitat
Constructor Summary
String(byte[] bytes)
Constructs a new String by decoding the specified array of bytes using the platform's default charset.
Oder willst du die Bytes im Array als Hexcode darstellen?

Thrasher

Bloody Newbie
Registered: Oct 2004
Location: Wien
Posts: 28
Ich nehm mal an du meinst byte[]->hex[]->char[]->string...also in den Arrayfeldern ist der Ascii-Code in Bitcodierung gespeichert? So hätt ichs verstanden

Dann in int konvertieren und als char Array speichern
also
char[i] = byte[i].intValue()
und den String einfach aus dem char[] zusammensetzen

imo ist das das einzige was man für Java braucht ;)

(was ich nicht verstehe:
String toString()
Returns a String object representing this Byte's value.
static String toString(byte b)
Returns a new String object representing the specified byte.

Eigentlich müsste byte[i].toString() ja den Wert zurückgeben, während Byte.toString(byte[i]) den Hash zurückgibt ?)

Die Lösung ist zwar etwas russisch, aber:
"In Russia, you don't code Java, Java codes you!"
Bearbeitet von Thrasher am 10.05.2006, 12:39

prayerslayer

Oar. Mh.
Avatar
Registered: Sep 2004
Location: vorm Sucher
Posts: 4073
Zitat von Thrasher
Ich nehm mal an du meinst byte[]->hex[]->char[]->string...also in den Arrayfeldern ist der Ascii-Code in Bitcodierung gespeichert?

leider hab ich überhaupt keine ahnung davon, aber nich nehme einmal an, ja. werd mich jetzt daran machen, deinen vorschlag zu implementieren, ich meld mich :) thx erstmal.

//edit:

hab jetzt folgendes gecodet:
Code: PHP
private String toString(byte[] array)
  {
    char[] charray = new char[array.length];
    for (int i=0;i<=array.length-1;i++)
    {
      Byte bt = new Byte(array[i]);
      charray[i]=bt.intValue();
    }
    return new String (charray);
  }

das lässt mich java aber nicht kompilieren, da die zeile charray[i]=bt.intValue() net passt. "possible loss of precision" und "found: int, required: char".

was machen?
Bearbeitet von prayerslayer am 10.05.2006, 12:52

Frys_Assassin

information keeper
Avatar
Registered: Oct 2001
Location: New New York
Posts: 2503
Ich vermute du brauchst die Konvertierung ins Characterset -> Versuchs mit dem von gue vorgeschlagenen Tipp:
String decodedString = new String(theByteArray)

Thrasher

Bloody Newbie
Registered: Oct 2004
Location: Wien
Posts: 28
Zitat

Byte bt = new Byte(array[i]);
charray[i]=bt.intValue();

eigentlich würd
Code:
chararray[i] = array[i].intValue();
auch reichen..

warum der mit Loss of precision und required:char kommt versteh ich ned ganz,
Code:
char a = 97;
funktioniert ja auch...

prayerslayer

Oar. Mh.
Avatar
Registered: Sep 2004
Location: vorm Sucher
Posts: 4073
Zitat von Thrasher
eigentlich würd
Code:
chararray[i] = array[i].intValue();
auch reichen..

das lässt er mich aber auch nicht machen ;) hab ich am anfang probiert gehabt...

ich probier mal die lösung von gue :)

//edit: yeeeeah funktioniert auf anhieb! heißen danke, gue :D
Bearbeitet von prayerslayer am 10.05.2006, 13:20

Thrasher

Bloody Newbie
Registered: Oct 2004
Location: Wien
Posts: 28
pah, ein Einzeiler wie langweilig ;p
passt, warum kompliziert wenns auch einfach geht
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz