Ein kleines Tool zum Umwandlen zwischen Integer- und Binärzahlen:
Spoiler anzeigen
;coded by UEZ 2010
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Change2CUI=n
#AutoIt3Wrapper_Res_Description=Converter between integer <=> binary
#AutoIt3Wrapper_Res_Fileversion=1.0
#AutoIt3Wrapper_Res_Language=1033
#AutoIt3Wrapper_Res_LegalCopyright=UEZ 2010
#AutoIt3Wrapper_Res_Field=Coded by|UEZ
#AutoIt3Wrapper_Res_Field=Build|2011-09-19
#AutoIt3Wrapper_Res_Field=Compile date|%longdate% %time%
#AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
#AutoIt3Wrapper_Res_SaveSource=n
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_UPX_Parameters=--best --lzma
#AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"
;~ #AutoIt3Wrapper_Run_After=Upack.exe "%out%" -c6 -f273 -red
#include <ButtonConstants.au3>
#include <Constants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <String.au3>
#include <StaticConstants.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#Region
$title = "Integer <=> Binary Converter by UEZ "
$ver = " v1.0 Build 2011-09-19"
$hWnd = GUICreate($title & $ver, 625, 336)
$MenuItem1 = GUICtrlCreateMenu("Help")
$MenuItem2 = GUICtrlCreateMenuItem("About", $MenuItem1)
$MenuItem4 = GUICtrlCreateMenuItem("Exit", $MenuItem1)
$Input = GUICtrlCreateInput("", 104, 144, 203, 30)
GUICtrlSetTip($Input , "Enter here an integer number up to 15 digits to convert it to binary on-the-fly!")
$fsize = 16
GUICtrlSetFont(-1, $fsize, 400, 0, "Times New Roman")
GUICtrlSetLimit($Input, 15)
#Region Caret (Cursor) ;thanks to Yashied
$hInput1 = GUICtrlGetHandle($Input)
$cursor_size_x = $fsize
$cursor_size_y = 23
$tIcon = DllStructCreate("hwnd")
$tID = DllStructCreate("hwnd")
$sIcon = @SystemDir & "\shell32.dll"
;~ $max_icons = _WinAPI_ExtractIconEx($sIcon, -1, 0, 0, 0)
$iBackground = 0xFFFFFF
$iIndex = 130 ;should be the butterfly icon
;~ $iIndex = Random(0, $max_icons, 1)
DllCall("user32.dll", "int", "PrivateExtractIcons", "str", $sIcon, "int", $iIndex, "int", $cursor_size_x, "int", $cursor_size_y, "ptr", DllStructGetPtr($tIcon), "ptr", DllStructGetPtr($tID), "int", 1, "int", 0)
$hIcon = DllStructGetData($tIcon, 1)
$hDC = _WinAPI_GetDC(0)
$hBackDC = _WinAPI_CreateCompatibleDC($hDC)
$hBitmap = _WinAPI_CreateSolidBitmap($hWnd, 0xFFFFFF - $iBackground, $cursor_size_x, $cursor_size_y)
$hBackSv = _WinAPI_SelectObject($hBackDC, $hBitmap)
$hFrontDC = _WinAPI_CreateCompatibleDC($hDC)
$hInv = _WinAPI_CreateSolidBitmap($hWnd, $iBackground, $cursor_size_x, $cursor_size_y)
$hFrontSv = _WinAPI_SelectObject($hFrontDC, $hInv)
_WinAPI_DrawIconEx($hFrontDC, 0, 0, $hIcon, 0, 0, 0, 0, $DI_NORMAL)
_WinAPI_BitBlt($hBackDC, 0, 0, $cursor_size_x, $cursor_size_y, $hFrontDC, 0, 0, $NOTSRCCOPY) ;invert icon color
_WinAPI_SelectObject($hFrontDC, $hFrontSv)
_WinAPI_SelectObject($hBackDC, $hBackSv)
_WinAPI_ReleaseDC($hWnd, $hDC)
_WinAPI_DeleteDC($hFrontDC)
_WinAPI_DeleteDC($hBackDC)
_WinAPI_DeleteObject($hIcon)
_WinAPI_DeleteObject($hInv)
$pHook = DllCallbackRegister("_WM_CARET", "ptr", "hwnd;uint;long;ptr")
$hProc = _WinAPI_SetWindowLong($hInput1, $GWL_WNDPROC, DllCallbackGetPtr($pHook))
$BlinkTime_save = DllCall('user32.dll', 'int', 'GetCaretBlinkTime')
$BlinkTime = Int($BlinkTime_save[0] / 2) ;-1 -> no blinking cursor
#EndRegion
$Edit = GUICtrlCreateEdit("", 104, 200, 345, 89, $ES_NOHIDESEL + $ES_LEFT)
GUICtrlSetLimit($Edit, 64)
GUICtrlSetTip($Edit , "Enter here a binary number up to 52 digits to convert it to integer on-the-fly!")
GUICtrlSetFont($Edit, 56, 400, 0, "Arial")
$LabelS = GUICtrlCreateLabel("Integer <=> Binary Converter", 19, 34, 595, 65)
GUICtrlSetColor(-1, 0x202060) ;RGB
GUICtrlSetFont(-1, 36, 800, 2, "Times New Roman", 4)
$Label1 = GUICtrlCreateLabel("Integer <=> Binary Converter", 16, 35, 595, 65)
GUICtrlSetBkColor(-1, -2)
GUICtrlSetFont($Label1, 36, 800, 2, "Times New Roman", 4)
GUICtrlSetColor(-1, 0x5080F0)
$Group1 = GUICtrlCreateGroup("", 8, 16, 609, 89)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("UEZ 2010", 8, 120, 609, 185, $BS_RIGHT)
GUICtrlSetFont(-1, 6, 400, 0, "Times New Roman")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label2 = GUICtrlCreateLabel("Integer:", 54, 146, 44, 24)
GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman")
$Label3 = GUICtrlCreateLabel("Binary:", 56, 204, 44, 30)
GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman")
$Label4 = GUICtrlCreateLabel("Hex: 0", 460, 204, 150, 30)
GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman")
GUICtrlSetTip($Label4, "To hex number conversation")
$Label5 = GUICtrlCreateLabel("Oct: 0", 460, 224, 150, 40)
GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman")
GUICtrlSetTip($Label5, "To octal number conversation")
$Button1 = GUICtrlCreateButton("Exit", 536, 264, 75, 25)
$Button2 = GUICtrlCreateButton("Clipboard", 456, 264, 75, 25)
GUICtrlSetTip($Button2 , "Press Clipboard to get binary number copied to clipboard")
$Button3 = GUICtrlCreateButton("Clipboard", 314, 146, 75, 25)
GUICtrlSetTip($Button3 , "Press Clipboard to get integer number copied to clipboard")
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')
#EndRegion
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $Button1, $MenuItem4
DllCall('user32.dll', 'int', 'SetCaretBlinkTime', 'uint', $BlinkTime_save[0])
_WinAPI_SetWindowLong($hInput1, $GWL_WNDPROC, $hProc)
DllCallbackFree($pHook)
GUIRegisterMsg($WM_COMMAND, "")
GUIDelete($hWnd)
Exit
Case $Button2
ClipPut(StringRegExpReplace(GUICtrlRead($Edit), "[' ']", ""))
MsgBox(64, "Clipboard", "Binary number copied to clipboard", 10)
Case $Button3
ClipPut(GUICtrlRead($Input))
MsgBox(64, "Clipboard", "Integer number copied to clipboard", 10)
Case $MenuItem2
MsgBox(0, $title, $title & $ver & @CRLF & @CRLF & "Thanks to Yashied for the caret code ;-)"& @CRLF & @CRLF & @CRLF & "Br," & @CRLF & "UEZ", 30)
EndSwitch
WEnd
Func Integer2Binary($in)
If $in = 0 Then Return 0
Local $bin
While $in > 0
$bin &= Mod($in, 2)
$in = Floor($in / 2)
;~ $in = BitShift($in, 1)
WEnd
Return(_StringReverse($bin))
EndFunc
Func Binary2Integer($in)
Local $int, $x, $i = 1, $aTmp = StringSplit(_StringReverse($in), "")
For $x = 1 To UBound($aTmp) - 1
$int += $aTmp[$x] * $i
$i *= 2
Next
$aTmp = 0
Return StringFormat('%.0f', $int)
EndFunc
Func Integer2Hex($in)
Local $aHex[16] = [0, 1, 2, 3, 4, 5 ,6 ,7 ,8, 9, "A", "B", "C", "D", "E", "F"]
Local $hex
While 1
$hex &= $aHex[Mod($in, 0x10)]
$in = Floor($in / 0x10)
If Not $in Then ExitLoop
WEnd
Return _StringReverse($hex)
EndFunc
Func Integer2Octal($in)
Local $oct, $t, $r
While 1
$oct &= Mod($in, 0x8)
$in = Floor($in / 0x8)
If Not $in Then ExitLoop
WEnd
Return _StringReverse($oct)
EndFunc
Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
Local $inp, $integer, $chk, $b, $c, $sLen, $int2
$chk = BitAND($wParam, 0x0000FFFF)
Switch $chk
Case $Input
$inp = GUICtrlRead($Input)
$integer = StringRegExpReplace($inp, "[^0-9]", "")
GUICtrlSetData($Label4, "Hex: " & Integer2Hex($integer))
GUICtrlSetData($Label5, "Oct: " & Integer2Octal($integer))
GUICtrlSetData($Input, $integer)
$b = Integer2Binary(Number($integer))
$c = _StringReverse(StringRegExpReplace(_StringReverse($b), ".{1,4}", " $0"))
GUICtrlSetData($Edit, StringLeft($c, StringLen($c) - 1))
$sLen = StringLen(GUICtrlRead($Edit))
Switch $sLen
Case 0 To 4
GUICtrlSetFont($Edit, 56, 400, 0, "Arial", 4)
Case 5 To 8
GUICtrlSetFont($Edit, 48, 400, 0, "Arial", 4)
Case 9 To 12
GUICtrlSetFont($Edit, 32, 400, 0, "Arial", 4)
Case 13 To 16
GUICtrlSetFont($Edit, 28, 400, 0, "Arial", 4)
Case 17 To 32
GUICtrlSetFont($Edit, 24, 400, 0, "Arial", 4)
Case 33 To 50
GUICtrlSetFont($Edit, 18, 400, 0, "Arial", 4)
EndSwitch
Case $Edit
$inp = GUICtrlRead($Edit)
$b = StringRegExpReplace($inp, "[^0-1]", "")
$c = _StringReverse(StringRegExpReplace(_StringReverse($b), ".{1,4}", " $0"))
GUICtrlSetData($Edit, StringLeft($c, StringLen($c) - 1))
$int2 = Binary2Integer(String($b))
GUICtrlSetData($Input, $int2)
GUICtrlSetData($Label4, "Hex: " & Integer2Hex($int2))
GUICtrlSetData($Label5, "Oct: " & Integer2Octal($int2))
$sLen = StringLen(GUICtrlRead($Edit))
Switch $sLen
Case 0 To 6
GUICtrlSetFont($Edit, 56, 400, 0, "Arial", 4)
Case 7 To 12
GUICtrlSetFont($Edit, 32, 400, 0, "Arial", 4)
Case 13 To 31
GUICtrlSetFont($Edit, 24, 400, 0, "Arial", 4)
Case 32 To 50
GUICtrlSetFont($Edit, 18, 400, 0, "Arial", 4)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Func _WM_CARET($hWnd, $uiMsg, $wParam, $lParam)
Local $Res = _WinAPI_CallWindowProc($hProc, $hWnd, $uiMsg, $wParam, $lParam)
Switch $uiMsg
Case $WM_SETFOCUS
DllCall('user32.dll', 'int', 'CreateCaret', 'hwnd', $hWnd, 'ptr', $hBitmap, 'int', 0, 'int', 0)
DllCall('user32.dll', 'int', 'ShowCaret', 'hwnd', $hWnd)
DllCall('user32.dll', 'int', 'SetCaretBlinkTime', 'uint', $BlinkTime)
Case $WM_KILLFOCUS
DllCall('user32.dll', 'int', 'HideCaret', 'hwnd', $hWnd)
DllCall('user32.dll', 'int', 'DestroyCaret')
DllCall('user32.dll', 'int', 'SetCaretBlinkTime', 'uint', $BlinkTime_save[0])
EndSwitch
Return $Res
EndFunc ;==>_WM_CARET
Vielleicht kann das ja mal jemand gebrauchen...
Gruß,
UEZ
2010-09-29: kleines Update -> die Integer Zahl wird jetzt auch nach Hex und Oktal umgewandelt und angezeigt
2010-11-29: hatte vergessen, dass auch bei der Binäreingabe in Oktal umgerechnet wird -> sollte jetzt funzen
2011-09-19: kleinere Modifikationen