string aus einem Array bilden

Schuero
2009-01-08
2009-01-09
  • Schuero - 2009-01-08

    Hallo.

    Ich versuche gerade aus einem Array of Byte einen String zu bilden.

    var

    Array: ARRAY [0..max_Arraylaenge] OF BYTE;

    s_String: String(80);

    p_Temp_1: POINTER TO BYTE;

    p_Temp_2: POINTER TO BYTE;

    b_dummy: BYTE;

    end_var

    (*Programmausschnitt***)

    p_Temp_1:=ADR(s_Sting);

    p_Temp_2:=ADR(Array[9]);

    FOR i_Zaehler:= 1 TO 6 DO

     b_dummy:=(p_Temp_2^);
    
     p_Temp_1:=ADR(b_dummy);
    
     (erhöhe die Pointer um 1 Stelle*)
    
     p_Temp_1:= p_Temp_1 +1;
    
     p_Temp_2:= p_Temp_2 +1;
    

    END_FOR

    (*Programmausschnitt Ende***)

    Zwar rennen die Pointer durch den String / Array aber der String füllt sich nicht mit dem Inhalt vom Array.

    Was mach ich falsch?

     
  • Anonymous - 2009-01-08

    Originally created by: Michael_W

    Bei w www.oscat.de w gibts freundlicherweise eine sehr große Funktionsbibliothek. Darin ist die gesuchte Funktion enthalten. Ich habe die Plain-Text-Version geladen und das Wichtigste der Funktion unten eingefügt. Hoffe, es hilft.

    (*

    version 1.3 12. jun. 2008

    programmer hugo

    tested by oscat

    this function will retrieve a string from an array of byte starting at position start and stop at position stop.

    the function needs to be called: buffer_TO_String(adr("array"),sizeof("array"), start, stop);

    because this function works with pointers its very time efficient and it needs no extra memory.

    *)

    FUNCTION BUFFER_TO_STRING : STRING(STRING_LENGTH)

    VAR_INPUT

    PT : POINTER TO ARRAY[0..32767] OF BYTE;
    
    SIZE : UINT;
    
    START : UINT;
    
    STOP : UINT;
    

    END_VAR

    VAR

    ps : POINTER TO BYTE;
    
    i : INT;
    

    END_VAR

    ( @END_DECLARATION := '0' )

    ps := ADR(BUFFER_TO_STRING);

    start :=MIN(start, size);

    stop := MIN(stop, size);

    ( check for maximum string_length )

    IF UINT_TO_INT(stop - start + 1) >= STRING_LENGTH THEN

    stop := start + INT_TO_UINT(STRING_LENGTH) - 1;
    

    END_IF;

    FOR i := UINT_TO_INT(start) TO UINT_TO_INT(stop) DO

    ps^ := pt^[i];
    
    ps := ps + 1;
    

    END_FOR;

    ( terminate the string )

    ps^ := 0;

    END_FUNCTION

     
  • Schuero - 2009-01-09

    Vielen Dank Michael_W

    Ich habe die Funktion auf meine Bedürfnisse reduziert.

    FUNCTION bArray_to_String : STRING(20)

    VAR_INPUT

    p_Ab : POINTER TO ARRAY[0..255] OF BYTE;
    
    b_Start : BYTE(0..235);
    
    b_Laenge : BYTE(0..20);
    

    END_VAR

    VAR

    b_max_Lange : BYTE:=20;
    
    ps : POINTER TO BYTE;
    
    i : INT;
    

    END_VAR

    (Adresszuweisung)

    ps := ADR(bArray_to_String);

    (Schreibe in den String)

    FOR i := BYTE_TO_INT(b_Start) TO (b_Laenge + b_Start) DO

    ps^ := p_Ab^[i];

    ps := ps + 1;

    END_FOR;

    (Pointer auf "NULL" setzen )

    ps^ := 0;

    rennt sehr gut

    (Die Funktion wertet den "typRING_BUFFER" eines "SERIAL_INTERFACE" von Wago aus)

    Besten Dank.

     

Log in to post a comment.