- LiFePO4 Speicher Test         
Ergebnis 1 bis 4 von 4

Thema: String nach Array umwandeln (?)

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    30.12.2006
    Beiträge
    57

    String nach Array umwandeln (?)

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ganz einfach gefragt: wie bekomme ich Zeichen aus einem String in ein Array?
    Ich mache zur zZ folgendes.
    Code:
    $regfile = "m2561def.dat"
    $crystal = 8000000
    $hwstack = 256
    $swstack = 256
    $framesize = 256
    $lib "I2C_TWI.LBX"
    Config Twi = 400000
    $baud = 57600
    $baud1 = 57600
    Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1
    Spiinit
    
    
    Dim Rxd_sgn As Byte
    Dim Rxd_stat As Byte
    Dim Rxd_buffer As String * 130
    
    Dim Values(40) As Byte
    Dim Rxdbuffer(130) As Byte
    
    Dim Debugstr As String * 130
    Dim A_str As String * 130
    Dim B_str As String * 130
    Dim C_str As String * 130
    Dim L_str As Byte
    
    On Urxc Record                                                                 ' isr rxd (com1)
    Rxd_stat = 0
    Open "com2:" For Binary As #1
    
    '-------------------------------------------------------------------------------
    'main
    Do
    
    If Rxd_stat = 2 Then
       If Left(rxd_buffer , 2) = "#a" Then A_str = Rxd_buffer
       If Left(rxd_buffer , 2) = "#b" Then B_str = Rxd_buffer
       If Left(rxd_buffer , 2) = "#c" Then C_str = Rxd_buffer
    
       Rxd_stat = 0
       L_str = 0
       Rxd_buffer = ""
       Enable Interrupts                                                           ' interrupts freigeben
       Enable Urxc
    End If
    
    '(
    ' nur für test:
    Print #1 , A_str;
    Print #1 , Len(a_str)
    Print #1 , B_str;
    Print #1 , Len(b_str)
    Print #1 , C_str;
    Print #1 , Len(c_str)
    ')
    Loop
    Close #1
    End
    '-------------------------------------------------------------------------------
    Record:
    Rxd_sgn = Udr0                                                                 ' von UART register nach zeichen
    
    If Rxd_sgn = &H23 Then Rxd_stat = 1                                            ' < # > empfangen
    If Rxd_stat = 1 Then Rxd_buffer = Rxd_buffer + Chr(rxd_sgn)                    ' von zeichen nach string
    
    
    If Rxd_sgn = &H0D Then
          Rxd_stat = 2                                                             ' < CR > empfangen. string ende
          Disable Interrupts                                                       ' interrupts sperren
          Disable Urxc
          L_str = Len(rxd_buffer)
    End If
    Return
    '-------------------------------------------------------------------------------

    In der Int.routine < record: > wird jedes empfangene Zeichen in einen String < rxd_buffer > geschoben.
    (Ende ist erreicht wenn &H0D empfangen worden ist)
    dann verschiebe ich den empfangen String, je nach zweitem Zeichen in einen anderen String. Zb. nach <A_Strg>

    nun bräuchte ich aber die Zeichen in einem Array, hier bei mir < Rxdbuffer > um sie weiter verarbeiten zu können.
    Wie bekomme ich die Zeichen da hin?

    sz
    Its not a bug its a feature

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hallo,

    hab hier schnell was zusammengetippt, sollte aber funktionieren:
    Code:
    Dim Lenght As Word
    Dim Receive_ar(130) As Byte
    Dim Rxd_buffer As String * 130
    Dim Tmp As Word
    
    
    '...
    '...
    
    Lenght = Len(rxd_buffer)
    For Tmp = 1 To Lenght
       Receive_ar(tmp) = Mid(rxd_buffer , Tmp , 1)
    Next Tmp
    Auch wenn diese Variante nicht die schnellste ist, funktionieren tuts
    Oder aber evtl. mittels Overlay:
    Code:
    Dim Rxd_buffer As String * 130
    Dim Receive_ar(130) As Byte At Rxd_buffer Overlay
    Dabei stehen dann die Werte automatisch im Array, da es streng genommen gar kein Array gibt, sondern du die Bytes, aus denen der String besteht, nur indirekt darüber ansprichst. Hat aber den Nachteil, dass wenn du das Array veränderst, du auch gleichzeitig den String veränderst. Außerdem musst du dann selbst herausfinden, wann der String zu Ende ist, sofern er nicht automatisch sowieso immer 130 Zeichen lang ist.... Diese Variante ist deutlich schneller, da sie eig gar keine Rechenzeit benötigt

    Gruß
    Chris

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    30.12.2006
    Beiträge
    57
    Hi,

    danke für die schnelle Antwort. da werde ich mal probieren

    sz
    Its not a bug its a feature

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    30.12.2006
    Beiträge
    57
    Hi,

    also, ich habe natürlich zuerst die Overlay Variante ausprobiert -> funktioniert.
    Aber eins ist (für mich) seltsam:
    wenn ich das overlay direkt über meinen bD_strg lege, so
    Code:
    Dim Rxdbuffer(130) As Byte At Bd_str Overlay
    dann meldet BASCOM: Error : 90 Line : 155 Address out of bounds [RXDBUFFER] , in File : D:\Bascom_Projekte\ .... .bas
    schreibe ich aber:
    Code:
    Dim Rxdbuffer(130) As Byte At Rxd_buffer Overlay
    geht es.
    MM habe ich alles richtig dim:
    Code:
    Dim Bh_str As String * 130
    Dim Dk_str As String * 130
    Dim Bd_str As String * 130
    Dim Rxd_buffer As String * 130
    'Dim Rxdbuffer(130) As Byte At Rxd_buffer Overlay
    Dim Rxdbuffer(130) As Byte At Bd_str Overlay
    eigenartig; na egal, Haupsache es funzt.
    @ Chris: vielen Dank für Deine Hilfe

    Uwe
    Its not a bug its a feature

Ähnliche Themen

  1. Integer in String umwandeln????
    Von KüSä im Forum PIC Controller
    Antworten: 12
    Letzter Beitrag: 20.12.2008, 20:56
  2. byte umwandeln in string
    Von xcool im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 30.11.2008, 22:09
  3. String zerlegen und umwandeln ?!
    Von Roberto im Forum C - Programmierung (GCC u.a.)
    Antworten: 34
    Letzter Beitrag: 08.08.2007, 10:27
  4. Word in String umwandeln
    Von Elektro-Jack im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 07.08.2007, 22:08
  5. string in zahl umwandeln
    Von pebisoft im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 09.06.2005, 14:20

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad