Seite 1 von 1

Dezimal nach Binär und zurück...

Verfasst: 27.01.2006 20:33
von Ghosty
Hallo Leutz...

Brauche wieder einmal eure Hilfe zu einem kleinen Problemchen!
Diesmal dreht es sich um die Ansteuerung eines selbstgebastelten
28 Kanal Thyristorgesteuerten Schaltinterfaces, welches über den
Parallelport mittels der inpout32.dll von Rechner aus gesteuert werden
soll.

Ich suche jetzt nach einem Weg, Dezimal in Binär umzuwahdeln und
umgekehrt also z.B. 32="11111100" bzw. "11111000"=32. Hat da einer
eine Idee?

Verfasst: 27.01.2006 20:38
von mk-soft
Hi,

eine richtung habe ich schon

siehe: Ergebnis$ = Bin(Wert)

Verfasst: 27.01.2006 20:40
von Macros
Oder direkt als Zahlen:

a=%11111100
debug a

auch ich suche den anderen Weg

Verfasst: 27.01.2006 20:58
von mk-soft
Neue Funktion ValB("Binär-String")

Code: Alles auswählen

Procedure.l ValB(s.s)

  result.l = 0
  l = Len(s)
  For i = l To 1 Step -1
    If Mid(s,i,1) = "1"
      result + Pow(2, l - i)
    EndIf
  Next i
  ProcedureReturn result
EndProcedure

Debug ValB("10000000")
Debug ValB("00001000")
FF :wink:

Verfasst: 27.01.2006 21:09
von mk-soft
oder etwas schneller

Code: Alles auswählen

Procedure.l ValB(s.s)

  result.l = 0
  add.l = 1
  For i = Len(s) To 1 Step -1
    If Mid(s,i,1) = "1"
      result + add
    EndIf
    add << 1
  Next i
  ProcedureReturn result
EndProcedure

Debug ValB("10000000")
Debug ValB("00001000")
; 32 Bit Max
Debug ValB("10000000000000000000000000000000")

FF :wink:

Verfasst: 28.01.2006 16:35
von NicTheQuick
Noch schneller :wink:

Code: Alles auswählen

Binaer.s = InputRequester("Binär -> Dezimal", "Geben sie eine Binärzahl ein.", "")

Dezimal = 0
*z.BYTE = @Binaer

While *z\b
  a = *z\b - 48
  
  Dezimal << 1
  Dezimal + a
  
  *z + 1
Wend

MessageRequester("Binär -> Dezimal", "Binärzahl: " + Binaer + #CRLF$ + "Dezimalzahl:" + Str(Dezimal))

Verfasst: 28.01.2006 17:26
von Deeem2031
Warum nich gleich so? ;)

Code: Alles auswählen

Binaer.s = InputRequester("Binär -> Dezimal", "Geben sie eine Binärzahl ein.", "") 

Dezimal = 0 
*z.BYTE = @Binaer 

While *z\b 
  
  Dezimal << 1 + *z\b - 48
  
  *z + 1 
Wend 

MessageRequester("Binär -> Dezimal", "Binärzahl: " + Binaer + #CRLF$ + "Dezimalzahl: " + Str(Dezimal))

Verfasst: 28.01.2006 17:58
von mk-soft
Ok,

ihr habt gewonnen, /:->
wollte aber die anfänger nicht gleich verwirren

FF :wink:

Verfasst: 28.01.2006 20:38
von Tafkadasom2k5
Ich poste mal mein kleines Tool was ich mal zum testen angewendet habe..ist nicht immer das genauste...aber seid nicht so hart mit einem Anfänger.. ;)

Ausserdem fühl ich mich plötzlich minderwertig...bei euren soo schönen Versionen...
Naja, bei mir bekommt ihr ein komplettes Tool ;)

Gr33tz
Tafkadasom2k5

Code: Alles auswählen

; PureBasic Visual Designer v3.90 build 1360


;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Check_Code
  #Check_Dezimal
  #Combo_Change
  #String_Code
  #String_Dezimal
  #Button_Proceed
  #ButtonInfo
EndEnumeration

;- Image Plugins

;- Image Globals
Global Image0

;- Catch Images
Image0 = CatchImage(0, ?Image0)

;- Images
DataSection
Image0:
IncludeBinary "Info.bmp"
EndDataSection

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 433, 129, 328, 136,  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_WindowCentered , "Hex- / Binär Umrechner V1.0 ")
    If CreateGadgetList(WindowID())
      OptionGadget(#Check_Code, 30, 20, 60, 20, "Code")
      GadgetToolTip(#Check_Code, "Klicken Sie hier, wenn sie eine Hexadezimal- /Binärzahl in eine Dezimalzahl umrechen möchten")
      OptionGadget(#Check_Dezimal, 30, 60, 60, 20, "Dezimal")
      GadgetToolTip(#Check_Dezimal, "Aktivieren Sie diese Box wenn sie eine Dezimalzahl in einen Hexadezimal- Binärcode umrechnen möchten")
      ComboBoxGadget(#Combo_Change, 110, 100, 110, 120)
      GadgetToolTip(#Combo_Change, "Wählen Sie hier aus in welchem System sie umrechnen wollen (Hexadezimal- /Binärsystem)")
      StringGadget(#String_Code, 110, 20, 110, 20, "")
      GadgetToolTip(#String_Code, "Hier den Hexadezimal- oder Binärcode eingeben")
      StringGadget(#String_Dezimal, 110, 60, 110, 20, "", #PB_String_Numeric)
      GadgetToolTip(#String_Dezimal, "Hier die Dezimalzahl eingeben")
      ButtonGadget(#Button_Proceed, 240, 50, 70, 30, "Proceed")
      ButtonImageGadget(#ButtonInfo, 300, 110, 20, 20, Image0)
      GadgetToolTip(#ButtonInfo, "Info")
      
    EndIf
  EndIf
EndProcedure

Procedure BinaryToDezimal(AnfangsCode.s)
  
  Laenge = Len(AnfangsCode)
  
  For i=1 To Len(AnfangsCode)
    Code.s + Mid(AnfangsCode,Laenge,1)
    If Laenge <> 0
      Laenge = Laenge - 1
    EndIf
  Next

  
  For i=1 To Len(Code)
    
    If Mid(Code,i,1) = "1"
      Ergebnis = Ergebnis + Pow(2,i-1)
    EndIf
    
  Next
  
  ProcedureReturn Ergebnis  
EndProcedure

Procedure HexToDezimal(AnfangsCode.s)
  
  Laenge = Len(AnfangsCode)
  
  For i=1 To Len(AnfangsCode)
    Code.s + Mid(AnfangsCode,Laenge,1)
    If Laenge <> 0
      Laenge = Laenge - 1
    EndIf
  Next
  
 
  
  For i=1 To Len(Code)
    
    Umrechnen.s =  Mid(Code,i,1)
    
    Select Umrechnen
      Case "A"
        Umrechnen = "10"
      Case "B"
        Umrechnen = "11"
      Case "C"
        Umrechnen = "12"
      Case "D"
        Umrechnen = "13"
      Case "E"
        Umrechnen = "14"
      Case "F"
        Umrechnen = "15"
      Case "a"
        Umrechnen = "10"
      Case "b"
        Umrechnen = "11"
      Case "c"
        Umrechnen = "12"
      Case "d"
        Umrechnen = "13"
      Case "e"
        Umrechnen = "14"
      Case "f"
        Umrechnen = "15"
    EndSelect
    
    
    Potenz = Pow(16,i-1)
    Ergebnis = Ergebnis + (Potenz * Val(Umrechnen))
    
    
    
  Next
  
  ProcedureReturn Ergebnis  
EndProcedure

Open_Window_0()

AddGadgetItem(#Combo_Change,-1,"Binärzahlen")
AddGadgetItem(#Combo_Change,-1,"Hex-Zahlen")
SetGadgetState(#Check_Code,1)
SetGadgetState(#Combo_Change,0)

Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow : Quit = 1 : EndIf
If EventID = #PB_Event_Gadget
  Select EventGadgetID()
     
      
    Case #ButtonInfo
      MessageRequester("Info", "Hexadezimal- / Binärumrechner v1.0 - (C) by Marc Giesmann" + Chr(10) + "" + Chr(10) + "Der Autor übernimmt hiermit keine Haftung für Schäden," + Chr(10) + "die dieses Programm unter Umständen verursachen kann." + Chr(10) + "" + Chr(10) + "Dieses Programm ist Freeware und darf ohne Zusage des Autors" + Chr(10) + "veröffentlicht werden." + Chr(10) + "" + Chr(10) + "Änderungen an dem Programm sind auschliesslich dem Autor" + Chr(10) + "dieses Programmes vorbehalten." + Chr(10) + "" + Chr(10) + "Bei Bugs, Kritik und Anregungen wenden Sie sich bitte an:" + Chr(10) + "" + Chr(10) + "marcarneg@surfeu.de" + Chr(10) + "" + Chr(10) + "Bevor Sie mir einen Bug melden,achten sie ob der Fehler kein Tipp- oder Schreibfehler Ihrerseits war!", #MB_OK|#MB_ICONINFORMATION)
      
    Case #Button_Proceed
      If GetGadgetState(#Check_Code) = 1 And GetGadgetState(#Combo_Change) = 0
        SetGadgetText(#String_Dezimal,Str(BinaryToDezimal(GetGadgetText(#String_Code))))
      EndIf

      
      
      If GetGadgetState(#Check_Code) = 1 And GetGadgetState(#Combo_Change) = 1
        SetGadgetText(#String_Dezimal,Str(HexToDezimal(GetGadgetText(#String_Code))))
      EndIf
      
      
      If GetGadgetState(#Check_Dezimal) = 1 And GetGadgetState(#Combo_Change) = 0
        Dezimalzahl = Val(GetGadgetText(#String_Dezimal))
        SetGadgetText(#String_Code,Bin(Dezimalzahl))
      EndIf
      
      If GetGadgetState(#Check_Dezimal) = 1 And GetGadgetState(#Combo_Change) = 1
        Dezimalzahl = Val(GetGadgetText(#String_Dezimal))
        SetGadgetText(#String_Code,Hex(Dezimalzahl))
      EndIf
      
    

  
  EndSelect
  


  
  
EndIf



Until Quit = 1
End