Frage bezüglich String/Zahl und die Umwandlung von Bin in Hex oder Dec

  • Huhu

    Ich hab ma ne Frage. Ich hab mich grad ein wenig mit der Umwandlung von Bin in Dec und Hex beschäftigt.

    Ich hab da was zusammengebastelt und nun etwas festgestellt was ich mir im mom nicht erklären kann...

    Spoiler anzeigen
    [autoit]

    $var1 = 01111111111111111111
    $var2 = 10000000000000000000
    $var3 = "01111111111111111111"
    $var4 = "10000000000000000000"

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

    $temp = HexDec($var1, 0) & "|" & HexDec($var1, 1) & @CRLF & HexDec($var2, 0) & "|" & HexDec($var2, 1) & @CRLF & _
    HexDec($var3, 0) & "|" & HexDec($var3, 1) & @CRLF & HexDec($var4, 0) & "|" & HexDec($var4, 1)

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

    msgbox(0, "", $temp)

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

    Func HexDec($sBin, $iHex = 0)

    $result = 0
    For $i = 0 To StringLen($sBin)
    if StringRight(StringTrimRight($sBin,$i),1) == 1 Then $result += 2^$i
    Next

    If $iHex == 1 Then
    $result = "0x" & Hex($result)
    EndIf

    Return $result
    EndFunc

    [/autoit]

    die funktion läuft gut wenn ich die binäre Zahl als String angebe...
    nur wenn ich das als normale zahl angebe geht es problemlos bis hin zu 0x7FFFF wenn ich 0x80000 als bin in hex oder Dec umwandeln will gibt er mir 0 zurück...
    aber wie gesagt wenn ich das als string schreibe dann gehts...
    jetzt die Frage Warum? ;)

  • $var2 = 10000000000000000000 kommt in der Funktion HexDec() als 9223372036854775807 an und deshalb die Null als Ausgabe!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • und warum?^^

    EDIT
    ach so werden die Zahlen als singed Long bzw singed Int64 gespeichert?

    EDIT2
    Kann ich ihm iwie sagen das es nur ne Binäre Zahl ist? oder gibs dieses Zahlenformat nich wirklich?

  • $var2 = 10000000000000000000 ist nicht eine Binärzahl, sondern ein Integer, das die int64 Grenze überschreitet!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • ja das meint ich ja :P^^
    meine frage war eher ob es sowas gibt das man ne zahl als binär beschreiben kann.. ich kann ja auch ne hexzahl definieren ... aber keine binärezahl im normalfall.. geht das iwie? so war das gemeint

  • ne nich wirklich ^^
    das wandelt ja auch nur um und das klappt ja bei mir^^
    es geht mir halt im mom darum AutoIt zu sagen das es keine Dec zahl is sondern eine Bin...
    ich kann ja auch ne Variable so definieren:

    [autoit]

    $var = 10
    oder halt
    $var = 0xA

    [/autoit]


    jetzt war halt meine frage ob man AutoIt sagen kann diese Variable bekommst du als Bin...
    ich mein ihc kann ja einfach meine Funktion nehmen und die Binärzahl als String übergeben..
    aber gesetz des falles das ich jemals die Binärzahl als Variable bekomme würd das bei höheren Zahlen halt nicht mehr mitspielen weil die ja als Dec interpretiert werden

    • Offizieller Beitrag

    Deine Frage erledigt sich von selbst, wenn du in der Hilfe mal die "Language Reference" liest:

    Zitat

    In AutoIt there is only one datatype called a Variant. A variant can contain numeric or string data and decides how to use the data depending on the situation it is being used in.


    Es gibt nur den Datentyp Variant. Wenn du mit gezielten Datentypen arbeiten möchtest, verwende DllStruct.

  • Schade, dass BitArray nicht implementiert wurde, bzw von mir SO nicht lauffähig gemacht werden konnte

    [autoit]

    $AList = ObjCreate("System.Collections.BitArray")

    [/autoit]