Binärcode zu Zahl
Übersicht

MarekBetreff: Binärcode zu Zahl |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hatte grade das Problem, das ich einen binärcode hatte und daraus die Zahl errechnen wollte. Da Blitz Basic allerdings keine direkte Funktion hat (?!) um das zu bewerkstelligen, hab ich kurzerhand eine geschrieben ![]() Der einzige Nachteil: Zurückgegeben wird ein String! Ging leider nicht anders, da Integer zu klein wurden^^ Lange Rede kurzer Sinn, hier der Code: Code: [AUSKLAPPEN] Function binary$(code$)
var$="1" ret$="0" For x=-Len(code$) To -1 y=Abs(x) s$=Mid$(code$,y,1) If s$="1" Then ret$=Plus$(ret$,var$) EndIf var=Plus$(var$,var$) Next Return ret$ End Function Function Plus$(s1$,s2$) .nomma If Len(s1$)>Len(s2$) Then s2$="0"+s2$ Goto nomma ElseIf Len(s2$)>Len(s1$) Then s1$="0"+s1$ Goto nomma EndIf rest=0 For x=-Len(s1$) To 0 If Not x=0 Then y=Abs(x) s$=Mid(s1$,y,1) k$=Mid(s2$,y,1) z1=Int(s$) z2=Int(k$) z=z1+z2+rest If z>9 Then z=z-10 rest=1 Else rest=0 EndIf rets$=Str$(z)+rets$ Else If rest=1 Then rets$="1"+rets$ EndIf EndIf Next Return rets$ End Function Ps.: die Funktion Plus(summand1$,summand2$) ist nur vür Nichtkommazahlen! MfG Marek |
||
Wer lesen kann ist klar im Vorteil... |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
einmal hätte gerreicht ^^
das geht aber auch einfacher: Code: [AUSKLAPPEN] Function binary(code)
For x = 1 To Len(code) z = Mid$(code, x, 1) ret = (ret * 2) + z Next Return ret End function |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
Marek |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein:
Die letzte Zahl steht vür die 1, nicht die erste ![]() Also: 10000000 ist 128, nicht 1^^ Und: Dein Code kann nicht so große Zahlen ausrechnen wie meiner ![]() Deiner schafft nichtmal 32 Bit ![]() Das war ja grade mein Problem... Wegen dem 2x, sry ![]() MfG Marek |
||
Wer lesen kann ist klar im Vorteil... |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
öhm was? oO
Das Binärsystem funktioniert genauso wie das Dezimalsystem nur mit der basis 2. Also erst die großen zahlen dann die kleinen: 0 = 0 1 = 1 10 = 2 11 = 3 100 = 4 101 = 5 110 = 6 111 = 7 1000 = 8 ..... |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
Willi die Rübe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Function ToBin$(z%)
Local val$ Repeat val$=(z Mod(2))+val$ z=Floor(z/2) If z=1 Then val$="1"+val$ : Exit If z=0 Then Exit Forever Return val$ End Function Das ist meine Variante für eine solche Funktion, die theoretisch unendlich Bit unterstützen würde. Habe ich extra in BlitzBasic "entworfen" um sie nach Ruby zu konvertieren. Funktioniert einwandfrei. |
||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man kann natürlich auch einfach binär verschieben...
Code: [AUSKLAPPEN] Function BinToNum(tbin$)
let=Len(tbin$) For x=1 To let num=Int(Mid$(tbin$,x,1)) If Not(num=0 Or num=1) y=1 EndIf Next If y=1 Then Return 0 For x=1 To let z=z+(Int(Mid$(tbin$,x,1)) Shl (let-x)) Next Return z End Function Ohne die Prüfroutine ist es noch schneller... |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
Willi die Rübe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und mal abgesehen davon, dass Blitz eine eingebaute Funktion hat:
Code: [AUSKLAPPEN] zahl = %10010
Print zahl waitkey() |
||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jo, woher weißt du das denn mit dem %? Das hab ich noch nirgends gelesen. Voll genial! | ||
°_° °.° °~° °v° .. -.- |
Marek |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nur, geht das auch mit ner Variable? | ||
Wer lesen kann ist klar im Vorteil... |
Deforation |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Leute.
Mit einer Variabel scheint es nicht zu gehen. Aber weiss jemand, was dies hier bezweckt. zahl = $10 Print zahl WaitKey() Die Ausgabe beträgt "16" |
||
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist für das hexdezimale Zahlensystem gedacht.. also die 16 (dezimal) ist die 10 im hexdezimalen System. | ||
aktuelles Projekt: The last day of human being |
ByteCroc |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Marek
Evtl. hab ich nicht genau begriffen was binary$ und Plus$ genau bewirken sollen. Meiner Meinung nach produziert Plus$ einen Fehler, siehe Demo-Code Mit StingToBin() und BinToString$() müsste eigentlich alles abgedeckt sein in Blitz. Ob es im Codeforum schon gleichwertige oder bessere Funktionen dafür gibt hab ich nicht nachgeschaut. Code: [AUSKLAPPEN] Print "%1100 = " + %1100 Print BinToString$( %1100 ) ;Wert Binär übergeben Print BinToString$( 12 ) ;Wert Dezimal übergeben Print BinToString$( $C ) ;Wert Hexadezimal übergeben Print StringToBin( "1100" ) Print StringToBin( "%1100" ) Print "%100011101100001100100 = " + %100011101100001100100 Print StringToBin( "%100011101100001100100" ) Print StringToBin( "100011101100001100100" ) ;Blitzinterne Rechenfunktionen zahl = %1001 + %1100 Print zahl Print BinToString$(Zahl) ; Mareks Function produziert hier einen Fehler Print "FEHLER >>>>> Plus$("+Chr$(34)+"1001"+Chr$(34)+","+Chr$(34)+"1100"+Chr$(34)+") = " + Plus$("1001","1100") ;Drei mal das selbe Ergebnis S$ = Str$(%1100) Print S$ Print %1100 Print binary$("1100") WaitKey() End ; BStr$ = BinToString$( Zahl ) Function BinToString$(num) Local bstr$ Local t$ For i = 0 To 31 If (num And ( 1 Shl (i))) Shr(i) bstr$ = "1" + t$ + bstr$ t$ = "" Else t$ = "0" + t$ EndIf Next Return "%"+bstr$ ; Hier evtl. Vorzeichen "%" entfernen wer es ohne haben möchte. End Function ; Zahl = StringToBin( "%1100" ) oder Zahl = StringToBin( "1100" ) ;mit oder ohne Vorzeichen: "%" Function StringToBin(BStr$) Local bout, i, li, lt Local t$ t$ = Trim$( BStr$ ) If Left$ ( t$, 1 ) = "%" Then t$ = Mid$( t$, 2, -1) lt = Len(t$) If lt > 32 Then Return -1 For i = 1 To lt li = lt-i If Mid$( t$, i, 1) = "1" bout = bout Or ( 1 Shl ( li )) EndIf Next Return bout End Function Function binary$(code$) var$="1" ret$="0" For x=-Len(code$) To -1 y=Abs(x) s$=Mid$(code$,y,1) If s$="1" Then ret$=Plus$(ret$,var$) EndIf var=Plus$(var$,var$) Next Return ret$ End Function Function Plus$(s1$,s2$) .nomma If Len(s1$)>Len(s2$) Then s2$="0"+s2$ Goto nomma ElseIf Len(s2$)>Len(s1$) Then s1$="0"+s1$ Goto nomma EndIf rest=0 For x=-Len(s1$) To 0 If Not x=0 Then y=Abs(x) s$=Mid(s1$,y,1) k$=Mid(s2$,y,1) z1=Int(s$) z2=Int(k$) z=z1+z2+rest If z>9 Then z=z-10 rest=1 Else rest=0 EndIf rets$=Str$(z)+rets$ Else If rest=1 Then rets$="1"+rets$ EndIf EndIf Next Return rets$ End Function |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group