Check out: https://docs.oracle.com/javase/7/docs/api/java/lang/Byte.html#toString(byte)
toString
public static String toString (byte b)
Gibt ein neues String-Objekt das angegebene Byte repräsentiert. Die Radix wird angenommen, 10.
Parameter sein: b - das Byte konvertiert werden Returns: der String Darstellung des angegebenen Byte
Siehe auch: Integer.toString (int)
Das Problem ist, dass Sie die Zeichenfolge in Bytes verwandeln, aber dann gehen Sie und drehen dieses Byte in eine Zeichenfolge/ein Zeichen (interpretiert als eine Basis 10 Nummer - Radix = 10) was bedeutet, dass Sie im Wesentlichen die ASCII-Entsprechung erhalten von jedem Zeichen (c = 99, o = 111, o = 111, l = 108), die eine Zahl in der Basis 10 ist. Wie auch immer du bist numerisches Zeichen für jede Ziffer. Wenn Sie die Zeichenfolge zurück in ein Byte drehen, erhalten Sie das Byte für das numerische Zeichen nicht das Byte für den Buchstaben wie Sie möchten.
Je nachdem, was Sie eigentlich wollen, müssen Sie einen anderen Ansatz finden. Es ist nicht klar, was Sie zu zeigen versuchen, indem Sie in Bytes konvertieren, aber wenn Sie wirklich zu und von einer Bitstring konvertieren möchten (eine Zeichenfolge, die aus den numerischen Zeichen für 0s und 1s besteht), müssen Sie mehr arbeiten.
Wenn Sie die Zeichenfolge, die Sie erstellen, mit einem anderen Zeichen wie einem Komma trennen (z. B. 99,111,111,108), dann könnten Sie davon ausgehen, dass die abgegrenzten Teilzeichenfolgen ganze Zahlen sind (für reguläre ASCII-Zeichen) und an "Integer.parseInt (s)" übergeben. oder 'Integer.valueOf (s)' und führen Sie dann eine Umwandlung in char durch und bauen Sie dann die Zeichen in eine Zeichenkette ein.
Zum Beispiel:
StringBuilder sb = new StringBuilder();
String str = "99,111,111,108"; // result of initial conversion
String[] sa = str.split(",");
char ch = '';
for(String s : sa) {
ch = Integer.parseInt(s);
sb.append(ch);
}
FileOutputStream fos = new FileOutputStream("new.txt");
fos.write(sb.toString().getBytes());
fos.close();
Eine hier wichtige Anmerkung ist, dass für Java zumindest Zeichen sind nur ganze Zahlen, außer dass sie ein Zeichen als ein ASCII-Zeichen interpretiert wird.
Das grundlegende Dilemma ist, glaube ich, dass die Umwandlung der Bytes in Strings ist eine destruktive Operation, wo der Kontext verloren geht. I.e. Der Computer weiß nichts mehr über die ursprünglichen Bytes, nur was der neu erzeugte String ist. Bytes sind binäre Daten, aber Zeichenketten sind eine Gruppe von Zeichen (allgemein ascii, aber auch UTF verschiedener Arten).
Was ist, wenn Sie die Zeichenfolge wie folgt erstellen: 'String x = new String (Daten," UTF-8 ");' ... verhält sich der Rest Ihres Programms dann wie Sie wollen? – dnault
Nein, gibt es eine andere Möglichkeit, die Zeichenfolge zurück in andere Bytes als getBytes() zu konvertieren? – Lui
@Lui - Sie können, aber "99111111108" ist nicht Ihre Zeichenfolge - es ist eine Zeichenfolge aus Bytes als Dezimalzahlen dargestellt. kühl -> [99] [111] [111] [108]. Sie müssen "cool" zurück in Bytes, nicht "99111111108" – xpcoffee