Welche BinToDec-Code ist besser?

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von hal2000.

    Welche BinToDec-Code ist besser?

    Hi

    Aus dem Netz habe ich folgenden Code
    it-academy.cc/article/1379/VB:…ezimalzahl+umrechnen.html
    Daraus habe ich folgenden Code gemacht.

    VB.NET-Quellcode

    1. Public Function BinToDec(ByVal Bin As String) As UInt32
    2. For N As Integer = 0 To (Bin.Length - 1) Step 1
    3. Dim ByteValue As String = Mid(Bin, Bin.Length - N, 1)
    4. If Convert.ToUInt32(ByteValue) <> 0 Then
    5. Dim TempResult As Double = Convert.ToInt32(ByteValue) * (2 ^ N)
    6. BinToDec = BinToDec + Convert.ToUInt32(TempResult)
    7. End If
    8. Next N
    9. End Function


    Dann habe ich mir einen Code selbst zusammengefriemelt.

    VB.NET-Quellcode

    1. Public Function BinToDec(ByVal BinValue As String) As UInt64
    2. If BinValue.Length > 64 Then MsgBox("Zu groß", MsgBoxStyle.Critical, "BinToDec-Fehler") : Exit Function
    3. For I As Integer = 0 To (BinValue.Length - 1)
    4. If BinValue.Substring(BinValue.Length - 1 - I, 1) = "1" Then
    5. BinToDec = BinToDec + Convert.ToUInt64(2 ^ I)
    6. End If
    7. Next
    8. End Function


    Welcher Code ist besser?
    Der Obrige sccheint mir ein paar überflüssige Sachen zuhaben.
    Zum Beispiel 'dblZwischenres = bytBit * (bytBas ^ n)', hier scheint mir 'bytBit *' unnötig zu sein.

    Gruß vom Nixsager
    benutze Convert.ToInt64(s As string, base As Integer) - anschließend nach UInt64 - hatten wir ja neulich einen Thread drüber ;)

    Allerdings ist der MethodenName Crap, denn die Methode konvertiert nichts binäres nach dezimal, sondern einen String (hofflich bestehend ausschließlich aus "0" und "1") nach UInt64.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Das war aber nicht die Frage.;)

    Gibt es denn einen binären Datentyp?
    Wenn man nur eine Stelle im binären Code ändern will, ist es doch einfachwe ihn erstmal als String auszugeben und diesen zu ändern?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nixsager“ ()

    und? ich halte mich nur ziemlich selten genau an die Frage - das würde viel zu sehr einschränken, und ich bin sehr dafür, Horizonte zu erweitern.

    eine strenge Antwort würde dich behindern - das wäre so, als wolle man ernsthaft auf die Frage antworten:
    "Was ist besser - krabbeln oder sich wälzen", wennman ebensogut auch einfach gehen könnte ;).


    Ah!
    Wenn man nur eine Stelle im binären Code ändern will, ist es doch einfachwe ihn erstmal als String auszugeben und diesen zu ändern?
    Hab ich dir eiglich schomal zum Grundlagen-studium dieses Buch lesen (hingegen das Galileio-Openbook ist Mist) empfohlen?

    Stichwort Bitweise Operatoren (Not, And, Or, Xor)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Danke, das ist eine Antwort auf meine Frage.

    P.S.
    Falls du genervt bist, wieso ich es unbedingt auf diese Weise machen will.
    Ich will den Code auch in älteren Version und Sprachen nutzen.

    Jetzt muss ich nur einen Ersatzt für die Convert-Funktion machen.
    Ich will ich auch in älterren Version und Sprachen nutzen.
    Naja - ich glaub ja nicht, dass das was wird. vb6 tut nur so als sei es mit vb.net kompatibel, in wirklichkeit läuft jeder Versuch, ein vb6-prog nach vb.net zu portieren, auf eine Neuprogrammierung hinaus.

    Nixsager schrieb:

    Fallsu du genervt bist, wieso ich es unbeding auf diese Weise machen will.
    Bin ühaupt nicht genervt von dir. Offensichtlich denkst du über die Sachen nach, die man dir sagt, und codest auch selbständig-kreativ.
    Wenn du mich nerven willst, poste einfach sowas wie:

    Nervensäge schrieb:

    ... klappt irgendwie nicht ...

    ... wie sähe denn der Code dafür aus? ...

    ... hab garnix verstanden - wie sähe denn der Code dafür aus? ...
    ;)

    ErfinderDesRades schrieb:

    in wirklichkeit läuft jeder Versuch, ein vb6-prog nach vb.net zu portieren, auf eine Neuprogrammierung hinaus.

    Bei mir eher andersherum.
    Ich will den Code auch für VB5 (6 habe ich nicht) und andere Sprachen nutzen, oder dort sind diese Convert-Funktion nicht vorhanden.
    Deswegen will ich einen eigenen Code nutzen, und so verstehe ich auch die Funktion besser.

    P.S.
    Misst, jetzt muss ich mir das irgendwie mit dem And und Xor undso anschauen.:(
    Dabei ist mir das zu hocht.

    Nixsager schrieb:

    Bei mir eher andersherum.

    ich find das egal wie rum.
    Wenn du in deim .Net-Prog deine selbstgebastelte Convert-Klasse verbaut, die vlt. Bit-Operationen an Strings ausführt und sonstige Absonderlichkeiten, ...
    Und iwann guckt ma jemand in den Code rein, der vlt. nichtmal weiß, dass bei dir die Abwärtskompatibilität Amok läuft - der wird Heulkrämpfe kriegen.

    Also da müsste es eine Art FSK für geben, dass arglose Programmierer davor geschützt sind, das anzugucken.
    es gibt keine binären oder dezimalen Zahlen. Eine Zahl ist eine Zahl, und Ganz-Zahlern (Integer) werden im Speicher als binäres Bitmuster gehalten.
    Bei Fließkomma-Zahlen ists komplizierter.

    Nun kann man Zahlen als solche garnet auf den Bildschirm bringen. Auf den Bildschirm kannman nur Text - Strings anzeigen. Jo, und da hat man verschiedene Möglichkeiten der Darstellung: Man kann eine Zahl dezimal darstellen, das ist dem Menschen am geläufigsten, vermutlich weil das so schön mit der Anzahl seiner Finger korrespondiert.
    Oder binär darstellen - da sieht man sehr schön, wie die einzelnen Bits inne Zahl wohl aufgereiht sein mögen.
    Oder HexaDezimal - dassis sehr kompakt, und mit bischen Übung versteht man immerhin die Anordnung der Bytes.

    Ach - das war nicht die Antwort auf deine Frage. Nee, ich kann dir nix sagen, was ohne Convert auskommen würde. Achdoch, es gibt Integer.Parse und Integer.ToString-Überladungen - aber die sind ebenso .Net spezifisch wie olle Convert.

    Nixsager schrieb:

    wie man eine binären Zahl in eine dezimale Zahl umwandeln kann

    Stichwort: Horner-Schema

    VB.NET-Quellcode

    1. Dim chars() As Char = binaryString.ToCharArray() 'z.B. "10010"
    2. Dim result As Int32 = Int32.Parse(chars(0))
    3. For i = 1 To chars.Length - 1
    4. result *= 2
    5. result += Int32.Parse(chars(i))
    6. Next
    7. 'result = 18


    Allgemein (für andere Basen als 2) ersetzt man einfach "result *= 2" mit "result *= BASIS".
    Gruß
    hal2000