Byte-Count-Format



  • Hallo,

    Einige Programmiersprachen speichern ihre Zeichenketten im Byte-Count-Format. Dabei enthält das erste Byte (Zeichen) die Länge der Zeichenkette und es folgen die eigentlichen Zeichen. C-Zeichenketten speichern Zeichen in einem Feld vom Typ char, das mit Null-Byte abgeschlossen ist. Kann mir einer sagen wie eine Funktion aussehen könnte die eine Zeichenkette im Byte-Count-Format, die ihr als Argument übergeben wird, in eine äquivalente C-Zeichenkette umwandelt? Allerdings darf dabei keine Kopie der als Argument übergebenen Zeichenkette gemacht werden.



  • Was ist das für eine Anforderung?

    Aber so könnte es gehen:

    1. Die Bytes des Strings um eine Position nach vorne verschieben.
    2. Auf die letzte freie Position wird eine 0 geschrieben.

    Die Anzahl der zu verschiebenden Bytes ist die Länge des Strings.



  • Wernus schrieb:

    Kann mir einer sagen wie eine Funktion aussehen könnte die eine Zeichenkette im Byte-Count-Format, die ihr als Argument übergeben wird, in eine äquivalente C-Zeichenkette umwandelt?

    ja.

    zum beispiel so:

    void pascalStringToCString(unsigned char* str){
       //länge merken tun
       unsigned char count=str[0];
    
       //daten um einen platz vormoschen
       for(int i=0;i<count;++i)
          str[i]=str[i+1];
    
       //hinten eine null dranmoschen
       str[count]='\0';
    }
    

    Allerdings darf dabei keine Kopie der als Argument übergebenen Zeichenkette gemacht werden.

    klar. wir sind ja nicht verschwenderisch.


Anmelden zum Antworten