Aus einem Byte-Array einen String lesen (ReadString())



  • Hallo zusammen,
    In verschiedenen Klassen (bspw. im .NET Bereich die Klasse BinaryReader/Writer) gibt es eine Funktion die nennt sich 'ReadString()'.
    Damit wird aus einem ByteArray ein UNICODE String ausgelesen.

    Was mich daran wundert ist, wie das Ganze funktioniert?
    Man muss keinerlei Parameter angeben (bspw. die Anzahl Bytes, welche die Länge des Strings repräsentiert).

    Wie funktioniert die Funktion denn?
    Wie kann sie wissen wie lange der String ist, wo er beginnt & wann er aufhört?

    Kann mir dies jemand vielleicht ein bisschen näher bringen?

    Besten Dank! 🙂



  • Achja.. Ich habe das ganze in dem Bereich hier gepostet, weil ich das später in C++ realisieren möchte.

    gruss



  • In C/C++ hört ein String mit dem Zeichen '\0' auf. Somit weiß man wann der String zu ende ist. Für 5 Zeichen brauchst du somit 6 Byte Speicher (char/Ansi).



  • Hi,

    Ich sollte also jedes Byte durchgehen und schauen ob dies gleich '\0' ist?
    Und dann von der Startposition bis zu dieser Position alles in einen String umwandeln? 🙂

    grz



  • std::string foo="bar";
     // Länge
    foo.length();
    // Zugriff aufs unterliegende array:
    foo[0];
    


  • BytePacket schrieb:

    Hi,

    Ich sollte also jedes Byte durchgehen und schauen ob dies gleich '\0' ist?
    Und dann von der Startposition bis zu dieser Position alles in einen String umwandeln? 🙂

    grz

    Ja das kann man machen, aber wenn das '\0' fehlt hast du ein Problem. In C++ verwendet man üblicherweise keine C-Strings sondern wie oberhalb gepostet z.B. den std::string. Wenn du mit einem konkreten Code kommst und dein Vorhaben klarer wird, dann kann man dir da auch C++igere Lösungen anbieten, als jeden char einzeln zu vergleichen. Wir haben da ganz tolle Sachen 😉



  • Hi,

    Das hört sich doch gut an. 🙂

    Also angenommen ich bekomme ein ByteArray das folgendermassen aussieht (Hexansicht):

    666F6F3490D3

    Wie bekomme ich jetzt aus dieser Zeichenkette den gewünschten String (foo), ohne dass ich die Länge weiss?



  • A) du bekommst stattdessen 666F6F3490D30000 und weisst das nach 0000 nix mehr kommt
    😎 du weisst das das immer genau 3 Buchstaben sind
    C) du bekommst stattdessen 0003666F6F3490D3 und weisst das die ersten 2 Byte die Länge codieren
    D) du kannst hexen


Log in to reply