Binär Hilfe

  • Ich baue gerade einen Minecraft Server nach und habe folgendes Problem.
    Das bisherige Script:

    Spoiler anzeigen
    [autoit]


    $maxlen = 4096
    $port = 25565
    $filename_log = "log.txt"

    [/autoit] [autoit][/autoit] [autoit]

    TCPStartup ()

    [/autoit] [autoit][/autoit] [autoit]

    $mainsocket = TCPListen ( 0, $port )
    OnAutoItExitRegister ( "_exit" )

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $accept = TCPAccept ( $mainsocket )
    If $accept <> -1 Then

    Do
    $recv = TCPRecv ( $accept, $maxlen )
    Until $recv <> ""
    FileWrite ( $filename_log, "[" & @HOUR & ":" & @MIN & ":" & @SEC & "]" & $recv & @CRLF )
    FileWrite ( "paket.txt", $recv )


    EndIf


    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit ()
    TCPCloseSocket ( $mainsocket )
    TCPShutdown ()
    Exit

    EndFunc

    [/autoit]

    Wenn der Server das erste Paket erhält vom Client.
    Sieht bei mir so aus:

    Spoiler anzeigen

    0x024A0007006B0069006E0067005F006200650009006C006F00630061006C0068006F00730074000063DD

    Wie kriege ich das in eine lesbare Form. Bei StringToBinary kommt auch nur das Gleiche raus.
    Das Protokoll sollte eigentlich nicht verschlüsselt sein.

  • Zu StringToBinary gibt es noch BinaryToString.
    Binary = 0xHEX, String = 'Hallo'.
    Um aus 0xABC also 'Hallo' zu machen nutzt du BinaryToString

    lg
    Mars

  • Zu StringToBinary gibt es noch BinaryToString.
    Binary = 0xHEX, String = 'Hallo'.
    Um aus 0xABC also 'Hallo' zu machen nutzt du BinaryToString

    lg
    Mars

    Wenn ich "0x024A0007006B0069006E0067005F006200650009006C006F00630061006C0068006F00730074000063DD" von Binär zu String mache
    kommt "J" raus. :S

  • Hi,

    Zitat

    Wenn ich "0x024A0007006B0069006E0067005F006200650009006C006F00630061006C0068006F00730074000063DD" von Binär zu String mache
    kommt "J" raus.


    wenn ich das mache, bekomme ich

    Code
    king_be	localhost
    • Offizieller Beitrag

    Hallo,

    Liegt daran, dass in AutoIt keine Ausgabefunktion nul (ASCII 00) anzeigen kann, so hast du was lesbares:

    Spoiler anzeigen
    [autoit]

    $binary = Binary("0x024A0007006B0069006E0067005F006200650009006C006F00630061006C0068006F00730074000063DD")

    [/autoit] [autoit][/autoit] [autoit]

    $string = StringReplace(BinaryToString ( $binary ),Chr(0),"")

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox ( 0, "", $string )

    [/autoit]

    Gruß,
    Spider

  • Spoiler anzeigen
    [autoit]

    $binary = '0x024A0007006B0069006E0067005F006200650009006C006F00630061006C0068006F00730074000063DD'
    $string = StringReplace(BinaryToString($binary),Chr(0), '', 0, 1)
    ConsoleWrite($string & @CRLF)

    [/autoit]

    Das Liegt daran, dass noch NULLen drinne sind und anderweitige Steuerzeichen.
    AutoIt ist leider immernoch nicht in der Lage einen String der Chr(0) enthält ordnungsgemäß auszugeben.

    Edit: Da war wohl jemand 5Sek schneller :D

  • Das liegt nicht an AutoIt, sondern an der WinAPI, auf die alle "Ausgabefunktionen" von AutoIt zugreifen. AutoIt macht da nichts falsch.

  • ...ich dachte eher an so etwas...

    [autoit]

    $a="0x024A0007006B0069006E0067005F006200650009006C006F00630061006C0068006F00730074";000063DD"
    $b=binarytostring($a,3)
    ConsoleWrite( ' $b = ' & $b & @crlf & @crlf) ;### Debug Console

    [/autoit]
    • Offizieller Beitrag

    Das liegt nicht an AutoIt, sondern an der WinAPI, auf die alle "Ausgabefunktionen" von AutoIt zugreifen. AutoIt macht da nichts falsch.

    Richtig, aber in anderen Programmiersprachen gibt es möglichkeiten nul immerhin auszugeben, aber das soll jetzt hier auch kein Flamen gegen AutoIt werden :D Daten mit CHR(0) will man meist ja eh nur verarbeiten und nich direkt auslesen ;)

    Andy: Coolio, arbeite zwar schon seit jahren damit, habe aber noch nie gesehen, dass BinaryToString ein UTF Parameter hat :D

    Gruß,
    Spider