String in einzelne Character zerlegen



  • Moin zusammen,

    ich muss bei meinem Hobbyprojekt aus einer Tabelle (TStringGrid) nacheinander Zahlen herausholen und per RS232 versenden.

    Grundsätzlich klappt das auch, aber nicht, wenn mein Microcontroller seine Arbeit verrichtet, sprich mit Interrupts arbeitet. Da ich nur zwischen den Interrupts Daten übertragen darf, kann ich aus meiner Builder-Applikation nicht 5 Zeichen direkt hintereinander wegschreiben, sondern muss jedes Zeichen einzeln übertragen. Grund dafür ist, dass der µC nur 2 Byte Puffer in der UART hat und ich dann einen Überlauf bekomme.

    Wenn ich also "123" übertragen will, möchte ich "1" "2" "3" übertragen. Der µC sendet nach jeder erhaltenen Zahl ein Zeichen zurück, damit das Nächste übertragen werden kann. Nach dem letzten Zeichen folgt ein fixer Buchstabe, der das Ende des Wertes markiert.

    Wie kann ich jetzt meinen String "123" in einzelne Werte zerlegen?

    Ich hatte schon mal was mit list->CommaText gemacht, aber die habe ich hier gerade nicht.

    Kann mir bitte mal jemand Anschwung geben?
    DANKE.

    Ach ja, BCB5

    Gruß

    Uwe



  • Ein einzelnes Zeichen kannst du z.B. mit dem Index Operator[] aus einen String ermitteln:

    String Test = "Hallo";
    
      char z1 = Test[1];  //in z1 steht dann 'H'
    

    Du müsstest dir dann z.B.eine for Schleife basteln, die Zeichen für Zeichen aus dem string ermittelt. Die Stringlänge bekommst du über die Memberfunktion Length().
    Und: Die AnsiString Klasse beim BCB ist 1 basiert, d.h. der Index fängt dort bei 1 an, nicht bei 0.



  • Wieso überträgst Du die Zahl** 123 **überhaupt als Zeichenkette "123" anstatt einfach als Zahlenwert (Integer)?

    Ein** char hat normalerweise eine Größe von einem Byte. Du kannst also anstatt eines einzelnen ASCII-Codes ( '1' , '2' , etc) auch eine beliebige Zahl von 0x00 (0) bis 0xFF **(255) übertragen.

    Wenn Du also ein Byte auf einmal übertragen kannst, solltest Du bei Zahlen bis maximal** 2^8 - 1 = 255 mit einer einzigen Übertragung auskommen. Bei Zahlen bis 2^16 - 1 = 65535 **mit zwei Übertragungen. Und so weiter...

    Die Übertragung als String erscheint mir als unnötiger Overhead. Zumal Du die Zahlen-Strings ja sonst spätestens auf dem Mikrocontroller in Integers umwandeln musst, um damit irgendwie rechnen zu können.


Anmelden zum Antworten