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

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Ghosty
Beiträge: 17
Registriert: 10.04.2005 00:27

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

Beitrag 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?
Benutzeravatar
mk-soft
Beiträge: 3846
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Hi,

eine richtung habe ich schon

siehe: Ergebnis$ = Bin(Wert)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Oder direkt als Zahlen:

a=%11111100
debug a

auch ich suche den anderen Weg
Benutzeravatar
mk-soft
Beiträge: 3846
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3846
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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))
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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))
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
mk-soft
Beiträge: 3846
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Ok,

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

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Antworten