Größe eines Strings in Bits / Bytes

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Größe eines Strings in Bits / Bytes

      Hey,

      für die Datenübertragung im GMS Netzwerk benutz man ja verschiedene Buffer wie z.B. den buffer_u8, welcher eine Zahl von 0 und 255 speichern kann und logischerweise dann 8 Bit bzw. 1 Byte braucht.
      Jetzt gibt es aber auch noch buffer_bool, buffer_string und buffer_text. Ich denke jetzt mal rein instinktiv, dass der buffer_bool 1 Bit braucht, bei den anderen habe ich jedoch keine Ahnung.
      Eventuell braucht man für buffer_string 1 Byte pro Zeichen, wenn man nach dem ASCII-Code geht, bin mir aber nicht sicher und wäre auf Hilfe von Wissenden froh. ^^

      Dazu noch eine Frage, angenommen ich möchte eine IP (255.255.255.255) Adresse am Speichereffizientesten übergeben, soll ich das dann mit jeweils 4 buffer_u8 machen oder per buffer_string/buffer_text?

      MFG Dufner
      Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Dufner ()

    • Okey, ich weiß zwar nicht weshalb ich früher darauf gekommen bin, aber habe einfach mal die buffer_get_size Funktion benutzt und ein paar Test gemacht :D

      Eine Adresse mit 4*buffer_u8 braucht wie angenommen 4 Bytes
      Eine Adresse mit buffer_string ODER buffer_text braucht 16 Bytes

      Hat sich also erledigt :D
      Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Dufner ()

    • Rhazul schrieb:

      wofür musst du das denn wissen? Du benutzt aber buffer_tell() ?!


      Ich benutze eig. immer buffer_create(größe,buffer_fixed,1) und definiere die Größe indem ich schaue, was alles in den Buffer kommt.
      Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
    • @Rhazul
      buffer_tell gibt nur die Position aus, wo du grad beim lesen bist. Wenn du zB. einen Buffer ausliest und etwas schreibst, aber noch nicht ganz zum Schluss gekommen bist, und alles absenden willst, sollte man eigentlich buffer_get_size nutzen. Ich mach dies zumindest immer, um so welche Probleme im nachhinein nicht noch zu lösen.
      Was hat das jetzt eigentlich mit der eigentlichen Frage zu tun? xD
      Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
      Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

      Willst du mit mir auf Discord Chatten/Quatschen?
      Meine Husi's Tutorial Reihe
    • Hat recht viel mit der eigentlichen Fage zu tun, denn eigentlich braucht man das nicht zu wissen. mit buffer_tell gibt es keinerlei Probleme, das kannst du auch nachlesen yoyogames empfehlt es zu benutzen. Ist doch nur unnötiger Mehraufwand alles immer selber zusammenzurechnen wenn die Funktion einem das richtige Ergebnis direkt liefert, und dabei können wenigstens keine Fehler auftreten. Die Funktion hat eigentlich nur diesen einen Sinn

      @Dufner Wo ich grade drüber nachdenke könnten deine Memoryleaks genau davon kommen das du das selbst zusammenklamüserst...

      @Husi012 ja richtig es gibt die Position aus, und da man mit buffer_seek bei pos 0 anfängt ist es ganz logisch das sich daraus die exakte Größe ergibt
      132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    • Er braucht die Größe des Buffers nicht für das abschicken eines Buffers über die network Funktion, sondern für den Speicherplatz der für den statischen Buffer reserviert werden soll. Und da hilft dir weder die Funktion buffer_tell noch die Funktion buffer_get_size, weil der Buffer zu diesem Zeitpunkt logischerweise noch garnicht existiert.

      Natürlich kann man auch einen Dynamischen Buffertyp nehmen. Dieser ist aber wesentlich langsamer und Speicheruneffizienter. Was Dufner hier machen will ist, vorauszuberechnen wie viel Platz der Buffer benötigt.
      Wenn es um das Abschicken geht, dann sollte man die Funktion buffer_tell oder buffer_get_size verwenden. Das macht das ganze einfacher und bei einem dynamischen Buffer unverzichtbar.

      Mit dynamischen Buffern meine ich den Buffertyp buffer_grow und statischen Buffern den Typ buffer_fixed.

    • Ach danke für die Informationen, network_send_packet( ... , buffer , buffer_tell( buffer ) ); benutze ich auch immer zum senden. ^^

      Jedoch noch eine andere Frage, wenn wir schon dabei sind. Buffergrößen werden doch immer in Zweipotenzen erstellt, wenn ich jetzt aber einen Buffer nicht voll bekomme, also z.B. einen Buffer mit 64 Bytes habe, belege aber nur 48 Bytes, ist dass dann legitim oder nicht?
      Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
    • 16 Bytes sind vollkommen vertretbar, da der Buffer nur temporär ist. Diese leeren Bytes sollte man allerdings nicht mit schicken, wodurch der Vorteil von buffer_tell deutlich wird. Es besteht aber auch kein Zwang Buffer mit der Größe von Zweierpotenzen zu erstellen. Der Typ buffer_grow neigt allerdings zu Zweierpotenzen.