- LiTime Speicher und Akkus         
Ergebnis 1 bis 9 von 9

Thema: Chr(0) im String

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.05.2005
    Alter
    32
    Beiträge
    601

    Chr(0) im String

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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:
    Code:
    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?
    Grüße Furtion

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    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.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    49
    Beiträge
    2.253
    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.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.05.2005
    Alter
    32
    Beiträge
    601
    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.
    Grüße Furtion

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    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.

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.05.2005
    Alter
    32
    Beiträge
    601
    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.
    Grüße Furtion

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.02.2005
    Ort
    NRW-Bergisches Land
    Beiträge
    311
    Print Chr(&H03); Chr(&H00); Chr(&H00); Chr(&H0d);
    oder ähnliches wird jedenfalls richtig ausgegeben.
    Gruß RePi!


    *** Holzhacken ist deshalb so beliebt, weil man bei dieser Tätigkeit den Erfolg sofort sieht. ***
    *** (Albert Einstein) ***

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    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.
    #ifndef MfG
    #define MfG

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    49
    Beiträge
    2.253
    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
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus