Rechnen mir Binäre Daten

  • Hey Leute,
    Ich probier momentan einfach nen bisschen mit autoit3 rum,<
    und da kam mir die Frage:

    "Wenn ich z.b. einen String mittels InputBox() einles, diesen anschließend mit Binary() in Binär umwandle, ist es dann mögliche mit den Binären Daten zu Rechnen(zb *2, +1 etc)?"

    mfg Timo

  • Hi Timo,
    natürlich 'ist es dann mögliche' mit den Zahlen zu 'rechnen'..
    Voraussetzung ist, daß wir beide jetzt das SELBE Binär-System meinen:
    Ich meine das DualSystem(nur 0 und 1)
    Wenn du die Strings in der der binären Darstellung läßt, mußt du nur fast alle Funktionen Operationen selber schreiben ;-))
    Wenn du jedoch die Zahlen ins Integer-Format umrechnest, kannst du natürlich alle möglichen Operationen durchführen.
    Kleine Hilfe und Denkanstoß:

    Spoiler anzeigen
    [autoit]

    ;(c)2009 by ytwinky, MD
    Opt('MustDeclareVars', 1)
    #NoTrayIcon
    ;AutoItSetOption("TrayIconHide", 1)
    Const $MaxAllowed=2^31-1, $MinAllowed=-2^31

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

    Dim $myBin='MaxAllowed=' &($MaxAllowed) &@Lf &'MinAllowed=' &$MinAllowed &@Lf, $Var=2^31, $i, $FromBin
    Do
    $i=InputBox('myBin-Eingabe', $myBin &@Lf &'IntegerZahl eingeben:', $Var, '', 300, 145)
    If $i<>'' Then
    $Var=Execute($i) ;so lassen auch Ausdrücke(z.B. 2^32) eingeben
    If $Var='' And @error<>0 Then ;Execute hat nicht geklappt, nochmal..
    $myBin='Fehler in Ausdruck: ' &$i &' ' &@error &@Lf &@Lf
    $Var=$i
    Else
    $FromBin=Int2Bin($Var)
    $myBin='Integer:' &$Var &@Lf &'Binär:' &$FromBin
    If StringInstr($myBin, '(')=0 Then
    $myBin&=@Lf &'Hex:' &Hex($Var)
    MsgBox(0, 'Bin2Int', Bin2Int($FromBin))
    EndIf
    EndIf
    EndIf
    Until $i=''

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

    Func Int2Bin($Integer, $StrLen=8) ;desired stringlength may be submitted(defaults to 8), will be used if applicable..
    Local $s='32Bit-RangeError:' &@Lf &'(' &$Integer &' is not in ' &(-2^31) &'..' &(2^31-1) &')', $h=Hex($Integer), $i=1
    Local $hx[16]=['0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', _
    '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111']; 'cause index 0 is used by stringsplit()..
    If $Integer>=-2^31 And $Integer<2^31 Then
    $s=''
    While StringMid($h, $i, 1)='0' ;find first chr in $h which is not '0'
    $i+=1
    If $i=StringLen($h) Then ExitLoop ;skip the last chr..
    Wend
    $h=StringMid($h, $i) ;remove leading zeroes from $h
    For $i=1 To StringLen($h)
    $s&=$hx['0x' &StringMid($h, $i, 1)]
    Next
    $i=$StrLen-StringLen($s)
    If $i>0 Then $s=Str($i, '0') &$s
    EndIf
    Return $s
    EndFunc

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

    Func Bin2Int($FromBin)
    Local $ToInt=0, $StrLen=StringLen($FromBin), $i, $c
    For $i=$StrLen To 1 Step -1
    $c=StringMid($FromBin, $i, 1)
    If $c<>'1' And $c<>'0' Then Return 'Error in ' &$FromBin &', Pos.:' &($StrLen-$i) &', chr not in [0..1]' ; guess what..
    $ToInt+=$c*2^($StrLen-$i) ;add the corrected exponent of 2, beware: adds zero if $c is zero, as requested ;-))
    Next
    If $ToInt>(2^31-1) Then $ToInt-=2^32 ;reduce $ToInt to the range of -2^31..(2^31-1)
    Return $ToInt
    EndFunc

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

    Func Str($StrLen, $Char)
    Local $i=0, $c=''
    For $i=1 To $StrLen
    $c&=$Char
    Next
    Return $c
    EndFunc

    [/autoit]


    Viel Spaß beim Probieren
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

  • Wunder dich aber nicht das du bei der Ausgabe der Binärdaten nicht 0000100 oder so bekommst, da in AutoIt Binär in Hex angegeben wird:
    0xFF = 1 Byte = 255 (Integer Wert) = 11111111 (1+2+4+8+16+32+64+128 )

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Wunder dich aber nicht das du bei der Ausgabe der Binärdaten nicht 0000100 oder so bekommst, da in AutoIt Binär in Hex angegeben wird:
    0xFF = 1 Byte = 255 (Integer Wert) = 11111111 (1+2+4+8+16+32+64+128 )


    AutoIt schreibt Binärdaten bitweise korrekt in den Speicher. Die String-Repräsentation wird Byteweise (1byte = 8 bits) ausgegeben, da dies eine lesbare und doch kompakte Darstellung erlaubt.
    Ein paar Funktionen gibt es hier: http://www.autoitscript.com/forum/topic/131037-binary-udf/