PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Chr(0) im String



Furtion
27.11.2008, 20:43
Hi,

ich habe hier ein lustigen kleinen "Fehler" mit Bascom und würde gerne
wissen ob es dazu schon Lösungen oder Lösungsansätze gibt. Den
"Fehler" habe ich auch schon in der RNwiki gefunden:


Eine weiter Anmerkung:
DATA "0", ...
können wir nicht schreiben, denn das interpretiert Bascom als String und legt in Wirklichkeit 2 Byte an, nämlich $30 und $0 als Stringterminator.


So also wird statt der $0 auch noch ne $30 drangeschrieben, kann man das
irgendwo ausstellen?

linux_80
27.11.2008, 21:52
Hm,
was soll den genau gemacht werden ?

Eine (binäre) 0 ist auf jeden Fall das Endekennzeichen eines Strings, steht auch irgendwo in der Hilfe.

Bei Data kann man ansonsten alle Werte angeben, gibt für verschiedene Typen diverse "Vorzeichen" bzw. Anhang.
zB. % für Integer.

Ein
Data &H0
sollte doch klappen.

Was beim AVR aber passieren kann/wird, wenn die Daten nicht in gerader Anzahl auftreten wird am Ende ein Byte drangehängt, um auf die Wortgrenzen zu kommen, da der Flash so organisiert ist.

Vitis
27.11.2008, 21:59
Ja klar, kein Bug, muss so sein.
Da ja "0" gegebe ist handelt es sich um einen String, sprich eine
Zeichenfolge im ASCII-Format.
Daher dann einmal Zeichen 30 für die Null und das Zeichen
Null (0) als Zeichen dass das String hier zu Ende ist.
Das Muss so sein.

Furtion
27.11.2008, 22:03
Hi,

mir ist es auch eben noch mal aufgefallen das ich es ein bisschen "undeutlich"
erklärt habe, deshalb hier noch mal etwas genauer:

Also wenn ich dieses hier schreibe: Print Chr(0)
Dann sendet ein Chip das AscII Zeichen 0.

Wenn ich jetzt eine String definiere und ihn mit "abc" + Chr(0) + "abc"
fülle und ihn danach ausgebe, kommt nur "abcabc" an. Die Chr(0) wird
komplett verschluckt.

An für sich wäre das ganze ja nicht so problematisch, denn man könnte die
Daten ja auch in einem Array speichern, aber wenn ich sie danach
ausgebe (in eine For...Next Schleife). Kommen die Daten nur Bruchstück
artig an, (wenn ich 100 Bytes losschicke, kommen zuerst die ersten 50, die
anderen sind dann bei den nächsten 100 Bytes dabei, usw....)

Gebe ich den ganzen String aus, kommt er perfekt an.

linux_80
27.11.2008, 22:14
Das passt ja so, ist nur nicht das was Du möchtest ;-)

Wie gesagt ist die Chr(0) das Endekennzeichen.

Dann wird in dem Beispiel "abc" + nix + "abc" zusammengefügt.

Bei einem Print kannst Du aber auch einzelne Strings mit ; aneinander hängen, und da könnte ein Chr(0) funktionieren, hab ich aber ned probiert.
:-k

Furtion
27.11.2008, 22:27
Hi,

das ist natürlich schlecht, muss ich noch mal schauen wie ich das
hinbekomme vill. mit irgendeinem Zähler, der sich merkt an welcher stelle
eine Chr(0) ist und dann eine "0" ins Array schreibt, beim ausgeben wird bei
ner "0" überprüft ob es dafür eine Stelle gibt, und statt der "0" eine Chr(0)
ausgegeben, ich weiß nur nicht, ob das dann richtig ausgegeben wird.

repi64
27.11.2008, 22:48
Print Chr(&H03); Chr(&H00); Chr(&H00); Chr(&H0d);
oder ähnliches wird jedenfalls richtig ausgegeben.

Jaecko
28.11.2008, 08:07
Meine mich auch noch zu erinnern, dass Bascom nen Unterschied in CHR(0) und CHR(000) sieht. Also wenn es ein Ascii-Zeichen sein soll, entweder in der o.g. Hex-Schreibweise oder 3-stellig.

Vitis
28.11.2008, 11:37
und dann gibts da noch :

"abcd{000}efgh"

sollte die Stringausgabe auch bei d enden
oder die bascom progger haben was ganz dolles
gemacht und zweimal die 0 als Endzeichen verwendet ... müsst man
mal nachschaun, ist ja kein problem per overlay ... werd mal
heut abend schaun