Forum: Mikrocontroller und Digitale Elektronik JavaScript: Zahlen und Zeichen


von KalterKaffee (Gast)


Lesenswert?

Von einem AVR-NETIO bekomme ich zehn 16-Bit Werte, die weiterverarbeitet 
werden sollen. Im Beispiel wird ein String mit 20 Nullen gefüllt, in 
2-Byte Werte aufgeteilt und ausgegeben.

Ausgabe: jeweils NaN.

Wie komme ich an die Zahlen heran?
1
script type="text/javascript">
2
  var Eingabe = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
3
  var i;
4
  var x;
5
  
6
  document.write (Eingabe.length, ":")
7
  
8
  for (i = 0; i < 20; i += 2)
9
    {
10
     x = Number(Eingabe.substr(i, 2));
11
     document.write (x, " ");   
12
    }
13
  
14
</script>

von Karl H. (kbuchegg)


Lesenswert?

KalterKaffee schrieb:
> Von einem AVR-NETIO bekomme ich zehn 16-Bit Werte

Was jetzt?

Kriegst du 10 Stück 16-Bit Werte (also pro Wert 2 Bytes), oder kriegst 
du einen String, in dem 10 Stück Zahlen in Textform dargestellt sind?

Wenn ersteres: Dann kannst du nicht mit String-verarbeitung da drann 
gehen.
Wenn letzteres, dann sieht dein String aber anders aus. Zb so
"23,587,25723,0,38,56,98,345,98,12"

> Wie komme ich an die Zahlen heran?

Die Frage, die es zuvor zu beantworten gilt lautet: Was kriegst du 
eigentlich wirklich? Bytes oder einen String?

von KalterKaffe (Gast)


Lesenswert?

Es sind 10 x 16-Bit (10 x 2 Bytes) zu einem String zusammengefasst (20 
Bytes). Diese werden in einem Rutsch vom NETIO gesendet und landen im 
Browser (JavaScript) in einem String der Länge 20. Diesen String möchte 
ich aufteilen in 16-Bit (2 Bytes) Portionen, um mit denen weiter 
zurechnen.

von Karl H. (kbuchegg)


Lesenswert?

KalterKaffe schrieb:
> Es sind 10 x 16-Bit (10 x 2 Bytes) zu einem String zusammengefasst (20
> Bytes).

Du kannst das gerne 'String' nennen. Dann stehst du aber alleine auf 
weiter Flur mit deiner Bezeichnung. Und du wirst in die Irre geführt, 
indem du fälschlicherweise annimmst, du könntest da mit Stringfunktionen 
wie zb substr irgendwas ausrichten. Denn was du da hast, gilt für den 
Rest der Welt nicht als 'String'.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Du kannst versuchen, den String einfach als ein Array aufzufassen, die 
Bytes einzeln zu holen und dann selbst zu einem 16 Bit Wert 
zusammenzusetzen.
So würde ich das probieren, nachdem ich mich vergewissert habe, dass die 
0-Bytes im 'String' mir da nicht einen Strich durch die Rechnung machen. 
Alles hängt davon ab, wie eigentlich intern Javascript seine Strings 
organisiert um die Länge festzustellen:
* auf C Art. Dann sieht es schlecht aus. Denn die besteht darin, dass 
ein String genau dann zu Ende ist, wenn das erste \0 Byte in den Zeichen 
auftaucht
* auf Pascal Art. Dann könntest du Glück haben. Denn dann weiß ein 
String unabhängig vom Inhalt, wie lang er ist. Die Länge wird extra 
gespeichert.

: Bearbeitet durch User
von KalterKaffee (Gast)


Lesenswert?

Falls jemand ein ähnliches Problem hat: so geht es.
1
<html><head><title>Test</title></head><body>
2
3
<script type="text/javascript">
4
  var Eingabe = "\n\0\r\0";    // Zwei 16-Bit Werte (High-, Lowbyte)
5
  var i;
6
  var x;
7
 
8
  for (i = 0; i < Eingabe.length; i += 2 )
9
    {
10
   x = Eingabe.charCodeAt(i) * 256 + Eingabe.charCodeAt(i + 1);
11
   document.write (i/2 + 1, ". 16-Bit Wert: ", x, "<br>");   
12
  }
13
  
14
</script>
15
16
</body></html>


Ausgabe:
1
1. 16-Bit Wert: 2560
2
2. 16-Bit Wert: 3328

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.