Hexadezimale Bytes

Kritosh

Neues Mitglied
Huhu

Ich habe folgendes Problem:

Ich habe einen Hexadezimalen String den ich in ein ByteArray abspeicher und mir dann(für mein Problem nicht weiter von Belangen) eine spezielle Bytefolge heraussuche und diese dann abspeicher.

Das Konvertieren tu ich einfach so:

Java:
String message = e.read(); 
Byte[] byteArray = message.getBytes("UTF-8");

Dies klappt auch alles soweit, ich schreibe diese Daten dann wie folgt in eine Datei :

Java:
FileOutputStream writeMessage = new FileOutputStream("Data.txt");
DataOutputStream dataStream = new DataOutputStream(writeMessage);

StringBuffer sb = new StringBuffer();
sb.append(data); //data entspricht der gesuchten byte Folge
dataStream.writeChars(byteArraytoString.toString());
writeMessage.close();
dataStream.close();

Wenn ich mir diese ausgespuckten Daten dann in einem Hexaeditor anschaue sieht das etwa so aus :

Code:
00000000h: 00 4C 00 33 00 44 00 61 00 74 00 61 00 7C 00 30 ; .L.3.D.a.t.a.|.0
00000010h: 00 36 00 34 00 30 00 31 00 36 00 32 00 39 00 2D ; .6.4.0.1.6.2.9.-

Die Folge geht so ähnlich weiter. Das Programm soll später mal auf einem Gerät laufen welches nur über begrenzt Speicherplatz verfügt, daher frage ich mich ob es eine Möglichkeit gibt die unnützen Nullbytes zu entfernen, da ich nicht 2 bytes pro Zeichen benötige. Gemeint sind hier also die Bytes 1 3 5 7 9 11 13 und 15.

Hab schon über Google nach einer Lösung gesucht. jedoch habe ich zu diesem Thema nichts gefunden.

Bin für jede Hilfe dankbar.

Lg
 

Marco13

Top Contributor
Das writeChars könnte ggf. ein write(byteArray) sein, wobei man wissen müßte, was "byteArraytoString" ist. Ansonsten mal schauen, ob man mit einem anderen Charset als UTF8 das ganze vielleicht als ASCII-Bytes bekommt... (Charsets sind immer ..
6a00d8341d3df553ef015434abb173970c-800wi

:D )
 
I

irgendjemand

Gast
problem liegt daran das du UTF-8 als charset nimmst ... da brauchst du immer 2 byte pro zeichen ...
versuchs mal mit ascii / ansi
 

HoaX

Top Contributor
Unfug, UTF-8 braucht nicht immer zwei Byte als Zeichen, wieso auch...

Ich würde erstmal rausfinden wo die 0-Bytes herkommen. Ich vermute mal es liegt am DataOutputStream#writeChars. Lass den doch einfach weg und benutze direkt FileOutputStream#write um dein byte[] zu schreiben.
 
I

irgendjemand

Gast
hmm ... stimmt ... da war ja mal was mit datentyp-größe ...
und da char 2 byte groß ist werden mit writeChar natürlich auch 2 byte geschrieben ...
 
S

Spacerat

Gast
Es geht zwar auch anders... aber Bytes in Strings und zurück kann man auch so tun...
Java:
public class ByteArrayToHexString
{
	private static final String HEX_DIGITS = "0123456789ABCDEF";

	public static void main(String[] args)
	{
		// Array to HexString
		byte[] test = {14, 69, -58, -3};
		StringBuilder sb = new StringBuilder();
		for(int n = 0; n < test.length; n++) {
			int b = (int) test[n] & 255;
			sb.append(HEX_DIGITS.charAt((b / 16) & 15));
			sb.append(HEX_DIGITS.charAt((b & 15)));
		}
		String testString = sb.toString();
		System.out.println(testString);
		// HexString to Array
		test = new byte[testString.length() / 2];
		for(int n = 0; n < testString.length(); n += 2) {
			test[n / 2]  = (byte) (HEX_DIGITS.indexOf(testString.toUpperCase().charAt(n)) * 16);
			test[n / 2] |= (byte) (HEX_DIGITS.indexOf(testString.toUpperCase().charAt(n + 1)));
			System.out.print(test[n / 2]);
			if(n / 2 < test.length - 1) {
				System.out.print(", ");
			}
		}
		System.out.println();
	}
}
sollten die Bytes in deinem String aber irgendwie separiert sein (z.B. mit Leerzeichen), muss man diesen erst entsprechend splitten und die einzelnen Byte-Strings (2 Zeichen!) zurück wandeln.
 

Kritosh

Neues Mitglied
Ok vielen Dank für all diese Antworten, werde mich am Montag wenn ich das Gerät zur Verfügung habe eure Vorschläge testen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C BufferedReader/BufferedWriter schreibt nicht alle Bytes Allgemeine Java-Themen 2
V Input/Output Austausch von Bytes zwischen C# und Java Allgemeine Java-Themen 3
RalleYTN Input/Output Clip als ein Array von Bytes? Allgemeine Java-Themen 2
J Temperatur aus bytes auslesen. Allgemeine Java-Themen 13
Q Bytes verschwinden im CipherInputStream Allgemeine Java-Themen 1
L Methoden Methode gibt mir beim verschlüsseln mit RSA 0 bytes aus ? Allgemeine Java-Themen 1
J Bytes aus Socket lesen Allgemeine Java-Themen 9
Q Datentypen Short aus Bytes - Signed -> Unsigned? Allgemeine Java-Themen 9
C Datentypen int in bytes zerlegen und wieder zusammen setzen Allgemeine Java-Themen 13
B bereits gelesene Bytes herausfinden Allgemeine Java-Themen 10
M FIFO Queue: bytes in, float/double/etc out Allgemeine Java-Themen 5
S String zu binary und zurück - Problem mit unsigned/signed bytes Allgemeine Java-Themen 2
TiME-SPLiNTER Von Unix, InputStreams und Null Bytes Allgemeine Java-Themen 2
K AES, Buffer und Bytes Allgemeine Java-Themen 2
S Bytes oder Hex-Werte zu Assembler Code? Allgemeine Java-Themen 6
L bytes nach int (little endian bitshift) Allgemeine Java-Themen 12
J Receive eines Hex-Bytes über COM-Port Allgemeine Java-Themen 4
G Zwei bytes vergleichen Allgemeine Java-Themen 2
M Bytes in Datei schreiben Allgemeine Java-Themen 10
T Spezielle Bytes in Datei schreiben Allgemeine Java-Themen 7
F Einlesen von Bytes Allgemeine Java-Themen 9
reibi Größe Array aus bytes Allgemeine Java-Themen 14
G RXTX verschicken einzelener Bytes Allgemeine Java-Themen 8
G WAV-Samples bearbeiten oder: 2 Bytes -> short -> float Allgemeine Java-Themen 5
T Größe eine Variablen in Bytes? Allgemeine Java-Themen 22
G Mehrere Bytes auf einmal einlesen Allgemeine Java-Themen 4
P int -> 4 bytes Allgemeine Java-Themen 11
R Menge an Bytes eines OutputStreams ermitteln. Allgemeine Java-Themen 6
R Wieviele Bytes gesendet Allgemeine Java-Themen 3
T Bestimmte bytes in einer Datei ersetzen? Allgemeine Java-Themen 4
D 16-Bit int --> 2* 8-Bit Bytes Allgemeine Java-Themen 17
H Objekte verbrauchen immer mindestens 16 Bytes Allgemeine Java-Themen 3
W Array größer als 65536 Bytes Allgemeine Java-Themen 7
A RandomAccessFile - Bytes vom Anfang der Datei löschen Allgemeine Java-Themen 32
C Code of a method longer than 65535 bytes Allgemeine Java-Themen 3
L 8 bytes von bestimmter position weg lesen? Allgemeine Java-Themen 11
D 2 Bytes in ein int convertieren Allgemeine Java-Themen 2
B Umwandeln von Bytes in float Zahl (DataInputStream) Allgemeine Java-Themen 3
G 0 Bytes bei temporäre Datei. Warum? Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben