Forum: Mikrocontroller und Digitale Elektronik JavaScript: Zahlen und Zeichen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von KalterKaffee (Gast)


Bewertung
0 lesenswert
nicht 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) (Moderator)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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) (Moderator)


Bewertung
0 lesenswert
nicht 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 Moderator
von Karl H. (kbuchegg) (Moderator)


Bewertung
0 lesenswert
nicht 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 Moderator
von KalterKaffee (Gast)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.