Convert.ToByte() liefert verschiede Ergebnisse

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Kraizy.

    Convert.ToByte() liefert verschiede Ergebnisse

    Abend,

    da ich zurzeit ein C# Projekt in VB umschreibe und - obwohl der komplette Code 1:1 richtig übersetzt wurde - nach stundenlanger Fehlersuche den Fehler endlich gefunden habe, wollte ich gerne mal wissen, wieso das so ist. Und zwar:

    C#-Quellcode

    1. private byte[] GetPortBytes(int port){
    2. byte[] array = new byte[2];
    3. array[0] = Convert.ToByte(port / 256);
    4. array[1] = Convert.ToByte(port % 256);
    5. return array;
    6. }


    VB.NET-Quellcode

    1. Private Function GetPortBytes(port As Integer)
    2. Dim array() As Byte = New Byte(1) {}
    3. array(0) = Convert.ToByte(port / 256)
    4. array(1) = Convert.ToByte(port Mod 256)
    5. Return array
    6. End Function


    C# Ausgabe bei Port 443:

    Quellcode

    1. array(0) = 1
    2. array(0) = 187


    VB Ausgabe bei Port 443:

    Quellcode

    1. array(0) = 2
    2. array(1) = 187
    Was war denn port in diesem Beispiel? Das VB.NET-Snippet ist BTW Option Strict Off.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Du benutzt im VB-Snippet die Double-Division, nur akzeptiert Convert auch Double. Von daher ist es nicht direkt Option Strict Off. Allerdings wird dadurch wohl auch diese Unregelmäßigkeit verursacht. Deshalb probier mal die Integer-Division(Statt "/" machste "\").

    LG
    Du wilst die beiden Bytes die den Port, der den Datentyp ushort haben sollte herausbekommen->

    Quellcode

    1. array[0] = (byte)(port & 0xFF);
    2. array[1] = (byte)((port >> 8) & 0xFF);


    oder einfach die hier, dafür bist du dann aber auch gezwungen den 16-bit int zu nehmen...
    msdn.microsoft.com/de-de/library/fk3sts66(v=vs.110).aspx
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    Kraizy schrieb:

    Und was ist daran Option Strict Off?
    nun, deine Frage war doch, warum das vb-snippet sich anners verhält als das c#-snippet. Und dein Projekt ist Strict Off eingestellt, das kann man daran erkennen, dass du einen ungeeigneten Divisions-Operator verwendest, ohne dass der Compiler meckert.
    Wenn du hingegen dein Projekt auf Strict On umstelltest, hätte der vb-Compiler das garnet akzeptiert.
    Aber jetzt hat choosemyname deine Eingangsfrage auch beantwortet, sogar leichter verständlich, als der Compiler es gekonnt hätte.
    Damit entfällt mal wieder der Grund für dich, dein Projekt auf Strict On zu stellen.

    Also grundsätzlich wärs schon sinnvoll, wenn man seine vb-Projekte immer auf strict On eingestellt hat, bzw. wenn einem das neu ist, da mal ein bischen zu recherchieren.

    Kraizy schrieb:

    dass ich am Ende vergessen hab "As Byte()" reinzuklatschen in meinen 1. Beitrag
    Ja, das meinte ich.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: