Hallo,
seit kurzem arbeite ich mit Java und gestern habe ich mit einem Projekt angefangen, bei dem ich eine serielle Schnittstelle auslese.
Diese Schnitstelle empfängt ein 8-Bit Signal, also können Werte von 0 bis 255 angenommen werden.
Zum Auslesen habe ich RXTX (RXTX : serial and parallel I/O libraries supporting Sun's CommAPI) benutzt.
Das ganze hat auch ganz gut funktioniert, allerdings gibt es noch ein paar kleinere Probleme.
Das einlesen klappt, ich bekomme die Daten in Form eines byte-Arrays.
Ich will eigentlich wieder Zahlen von 0 bis 255 herausbekommen, leider habe ich es nicht hinbekommen, direkt aus den bytes die zahlen zu konstruieren und habe deswegen erstmal in einen String umgewandelt:
Ich benutze einen String constructor zum Umwandeln in einen String:
String(byte[] bytes, int offset, int length)
Constructs a new String by decoding the specified subarray of bytes using the platform's default charset.
Das ganze funktioniert auch halbwegs, aber das Problem ist, dass nicht in ASCII sondern in Unicode umgewandelt wird.
Der Anfang von Unicode ist zwar identisch mit ASCII, aber es gibt Zeichen, die in Unicode an andere Stelle nochmal vorkommen (z.B. das €-Zeichen, das bei ASCII auf Platz 128 ist (glaube ich), und das bei Unicode bei ca. 6500 nochmal vorkommt).
Wenn ich jetzt das €-Zeichen umwandele , kommt ca. 6500 raus, was nicht mehr in dem Bereich, den ich haben will, liegt.
Zum umwandeln hab ich das hier benutzt:
nehmen wir mal an, der string heißt str
Das Umwandeln klappt, aber halt in Unicode statt ASCII.
Ich habe mit einer anderen Software die serielle Schnittstelle auch noch ausgelesen zum vergleich und bei ASCII werden die selben Zeichen angezeigt, aber im Zehnersystem gibt es Unterschide, wenn das € z.B. statt 128 auf einmal ca. 6500 ist.
Dann hatte ich mir überlegt, ich versuche doch direkt die bytes auszulesen, aber ich habe nicht rausbekommen, wie das dort drin gespeichert ist.
Wenn man einfach jedes byte als eigene zahl interpretiert, funktioniert es nicht.
Das komische war auch, dass meine bytes ungefähr so aussahen:
erstmal so ca. 5 mal -1 oder 1 und danach nur noch 255 oder 0
irgendwie kriegt der string-constructor dort das richtige zeichen raus, aber ich bin leider nich dahintergestiegen, wie das funktioniert.
Hoffe, ihr könnt mir helfen, welcher der Wege ist nicht so wichtig, aber es sollte auf jeden fall funktionieren und wenn ich nachher nachvollziehen kann, wie das mit dem byte funktioniert, wäre natürlich auch nicht schlecht.
Vielen Dank schonmal für eure Hilfe!
seit kurzem arbeite ich mit Java und gestern habe ich mit einem Projekt angefangen, bei dem ich eine serielle Schnittstelle auslese.
Diese Schnitstelle empfängt ein 8-Bit Signal, also können Werte von 0 bis 255 angenommen werden.
Zum Auslesen habe ich RXTX (RXTX : serial and parallel I/O libraries supporting Sun's CommAPI) benutzt.
Das ganze hat auch ganz gut funktioniert, allerdings gibt es noch ein paar kleinere Probleme.
Das einlesen klappt, ich bekomme die Daten in Form eines byte-Arrays.
Ich will eigentlich wieder Zahlen von 0 bis 255 herausbekommen, leider habe ich es nicht hinbekommen, direkt aus den bytes die zahlen zu konstruieren und habe deswegen erstmal in einen String umgewandelt:
Ich benutze einen String constructor zum Umwandeln in einen String:
String(byte[] bytes, int offset, int length)
Constructs a new String by decoding the specified subarray of bytes using the platform's default charset.
Das ganze funktioniert auch halbwegs, aber das Problem ist, dass nicht in ASCII sondern in Unicode umgewandelt wird.
Der Anfang von Unicode ist zwar identisch mit ASCII, aber es gibt Zeichen, die in Unicode an andere Stelle nochmal vorkommen (z.B. das €-Zeichen, das bei ASCII auf Platz 128 ist (glaube ich), und das bei Unicode bei ca. 6500 nochmal vorkommt).
Wenn ich jetzt das €-Zeichen umwandele , kommt ca. 6500 raus, was nicht mehr in dem Bereich, den ich haben will, liegt.
Zum umwandeln hab ich das hier benutzt:
nehmen wir mal an, der string heißt str
Java:
char c = str.charAt(0);
int k = (char) c;
Das Umwandeln klappt, aber halt in Unicode statt ASCII.
Ich habe mit einer anderen Software die serielle Schnittstelle auch noch ausgelesen zum vergleich und bei ASCII werden die selben Zeichen angezeigt, aber im Zehnersystem gibt es Unterschide, wenn das € z.B. statt 128 auf einmal ca. 6500 ist.
Dann hatte ich mir überlegt, ich versuche doch direkt die bytes auszulesen, aber ich habe nicht rausbekommen, wie das dort drin gespeichert ist.
Wenn man einfach jedes byte als eigene zahl interpretiert, funktioniert es nicht.
Das komische war auch, dass meine bytes ungefähr so aussahen:
erstmal so ca. 5 mal -1 oder 1 und danach nur noch 255 oder 0
irgendwie kriegt der string-constructor dort das richtige zeichen raus, aber ich bin leider nich dahintergestiegen, wie das funktioniert.
Hoffe, ihr könnt mir helfen, welcher der Wege ist nicht so wichtig, aber es sollte auf jeden fall funktionieren und wenn ich nachher nachvollziehen kann, wie das mit dem byte funktioniert, wäre natürlich auch nicht schlecht.
Vielen Dank schonmal für eure Hilfe!