Binärstring zusammensetzen

  • Hi,
    da ich eine Minecraft UDF schreibe und es leid bin die Empfangenden Daten über große Umwege in ein lesbares Format umzuwandeln, hab ich mir gedacht, dass man das ganze viel bequemer in C++ realisieren kann.
    Eine Netzwerkverbindng herzustellen war erstmal kein Problem, aber als ich versuchte die benötigten Logindaten zu senden kam ich schon ins Grübeln.

    Die ersten Handshake Packete zum MC Server sehen so aus:
    0x02<Länge des Strings><String (UCS-2 string, big-endian)>

    Im Moment löse ich das so:

    Spoiler anzeigen

    der Zugehörige AutoIt Code sieht so aus:

    Spoiler anzeigen
    [autoit]

    TCPSend($iSocket, "0x02" & String16($sUsername))
    Func String16($sString)
    Local $bData
    $bData = StringTrimLeft(StringToBinary($sString, 3), 2)
    $bData = Hex(BinaryLen("0x" & $bData) / 2, 4) & $bData
    Return $bData
    EndFunc ;==>String16

    [/autoit]


    Ein Fertig zusammengesetztes Login Packet sähe dann so aus:

    0x0200040054006500730074
    PacketID
    Länge des Strings (Ohne Null Bytes vom String)
    String (Test)

    [color=#000000]Nun zu meiner Frage, wie kann ich das Eleganter Lösen und gibt es eine Variante von WinSock2 die STD Strings als Parameter annimmt?
    Wer es vieleicht bei seiner Lösung benötigt: Hier sind die Datentypen vom Minecraft Protokoll

  • Hi, ich denke, folgendes sollte funktionieren:
    - String z.B. in wchar_t-Array speichern
    - bytezahl = sizeof(wchar_t) * stringlen
    - buffer allokieren: 3 + bytezahl
    - buffer[0] = 0x2
    - *(reinterpret_cast<short*>(&buffer[1])) = stringlen
    - Kopiere String nach (reinterpret_cast<wchar_t*>(&buffer[3]))