Sbyte nach Byte konvertieren

Hallo,

hoppla :-( Da merkt man mal wieder, dass ich mit .NET fast nix am Hut hab :)

Ob eine System.OverflowException beim Casting geworfen wird, hängt davon ab, ob der Kontext checked oder unchecked ist. Dies kann man entweder über die entsprechende Kompileroption /checked bestimmen oder über die gleichnamigen Schlüsselwörter checked und unchecked.

Da neu erzeugte Projekte in SharpDevelop standardmäßig mit /checked kompiliert werden, wurde bei mir eine entsprechende Ausnahme geworfen.

Will man unabhängig von der Kompilereinstellung eine Konvertierung „unchecked“ durchführen, könnte man das folgendermaßen erreichen:
C#:
byte b = unchecked((byte)sb);

VB.NET bietet leider keine dazu äquivalenten Schlüsselwörter an.

Grüße,
Matthias
 
Hallo Matthias!
Da neu erzeugte Projekte in SharpDevelop standardmäßig mit /checked kompiliert werden, wurde bei mir eine entsprechende Ausnahme geworfen.

Und ich dachte, Du hättest es nicht ausprobiert:p . Da sind wir wohl Opfer der unterschiedlichen IDEs geworden.

Im Visual Studio 2005 werden C#--Projekte standardmässig ohne /checked kompiliert.

VB.NET bietet leider keine dazu äquivalenten Schlüsselwörter an.
Mir sind auch keine bekannt und ich habe auch nichts in der Dokumentation dazu gefunden.
Allerdings gibt es einen passenden Compilerschalter in VB mit dem die Überlaufprüfung und DIV/0 ausgeschaltet wird:
/removeintchecks+
Dieser Schalter ist interessanterweise bei VB-Projekten defaultmäßig nicht aktiv (MS wird schon wissen warum;) ).
In der VS2005-IDE kann man den Schalter bei den Projektoptionen/Kompilieren->Erweiterte Kompilierungsoptionen/"Überprüfungen auf Ganzzahlüberlauf entfernen" setzen.
Leider gilt dieser Schalter für das ganze Projekt.
Deshalb gibt man besser die entsprechende(n) Konvertierungsmethoden in eine separate DLL mit dem aktiven Schalter.
Dort lässt sich das Array komfortabel mit
Code:
        For i As Integer = 0 To sbArray.GetUpperBound(0)
            bArray(i) = CByte(sbArray(i))
        Next
konvertieren.

Mit dieser Vorgehensweise komme ich auch in VB ca. auf flotte 10800 Ticks für 1.000.000 Elemente;-) .

Schöne Grüße
Peter
 

Neue Beiträge

Zurück