Aus RN-Wissen.de
Wechseln zu: Navigation, Suche


Bascom Strings und Bytes

Es taucht öfter die Frage auf, wie man aus Strings einzelne Zeichen als Byte gewinnen kann. Die "MID" Funktion, die sich ja anbieten würde, verlangt für das Ergebnis auch wieder einen String.

Eine Lösung ist die Redefinition des Strings als Byte-Array durch "OVERLAY"

 DIM MyString AS STRING * 20
 DIM MyArray(21) AS BYTE AT MyString OVERLAY

Man darf daran erinnern, daß String * 20 nicht die Länge 20, sondern 21 hat, denn für die abschließende NULL muß immer ein Platz frei bleiben.

Einzelbytes aus String

 DIM MyEinzelByte AS BYTE
 DIM MyStrlen AS BYTE
 DIM MyIndex AS BYTE
 
 MyString = "Hello, World"
 MyStrlen = LEN(MyString)
 FOR MyIndex = 1 TO MyStrlen 
       MyEinzelByte = MyArray(MyIndex)
 NEXT 

Natürlich kann man auch das Stringende durch die NULL erkennen

 DIM MyEinzelByte AS BYTE
 DIM MyIndex AS BYTE
 
 MyString = "Hello, World"
 FOR MyIndex = 1 TO 21
       MyEinzelByte = MyArray(MyIndex)
       IF MyEinzelByte = 0 THEN 
          EXIT FOR
       END IF
 NEXT 


Strings aus Einzelbytes

Besonders beim Terminal-Input über die UART kommt das vor. Die Definition von String und Byte ist gleich

 DIM MyEinzelByte AS BYTE
 DIM MyIndex AS BYTE
 
 MyIndex = 1
 DO 
     MyEinzelByte = INKEY()
     IF MyEinzelByte <> 0 THEN 
        IF MyEinzelByte = 13 THEN 
           MyArray(MyIndex) = 0
           EXIT DO 
        ELSE 
           MyArray(MyIndex) = MyEinzelByte
           INCR MyIndex
        END IF
     END IF
 LOOP 

 PRINT MyString


Autor

Siehe auch