Migration von VB6 / VBA nach C# => LSet

Written on April 18, 2010

Zu VB6 / VBA-Zeiten (sind die eigentlich schon vorbei? ;-)) gab es die LSet-Anweisung, die wie folgt beschrieben war:

"Richtet eine Zeichenfolge innerhalb einer Zeichenfolgenvariablen links aus oder kopiert eine Variable eines benutzerdefinierten Datentyps in eine Variable eines anderen benutzerdefinierten Datentyps."

Damit konnte man z.B. zwei int-Werte, die in einem double gespeichert waren, auslesen:

Type DoubleRec
     dValue As Double
End Type

Type Long2Rec
     iLower As Long
     iUpper As Long
End Type   

Function ExtractFields _
( 
_     ByVal dValue As Double, 
_     iLower As Long, 
_     iUpper As Long _
)
     Dim dr                          As DoubleRec
     Dim i2r                         As Long2Rec
     ' Set the double value
     dr.dValue = dValue
     ' Copy the values
     LSet i2r = dr
     ' Extract the values
     iLower = i2r.iLower
     iUpper = i2r.iUpper
End Function

Somit wurden z.B. aus dem double-Wert 6.36810936868678E-311 die beiden int-Werte 0 und 3001.

Wie macht man das mit C# im Jahre 2010?

Ganz einfach:

double input = 6.36810936868678E-311;
int wert1 = BitConverter.ToInt32(BitConverter.GetBytes(input),0) // 0
int wert2 = BitConverter.ToInt32(BitConverter.GetBytes(input),4) // 3001