Files
2018-11-19 19:38:38 +01:00

168 lines
6.1 KiB
VB.net

Option Explicit On
Module Conversions
Private Const OFFSET_2 = 65536
Private Const MAXINT_2 = 32767
Private Const OFFSET_4 = 4294967296
Private Const MAXINT_4 = 2147483647
Function UnsignedToShort(ByVal Value As UShort) As Short
If Value <= MAXINT_2 Then
UnsignedToShort = Value
Else
UnsignedToShort = Value - OFFSET_2
End If
End Function
Function ShortToUnsigned(ByVal Value As Short) As UShort
If Value < 0 Then
ShortToUnsigned = Value + OFFSET_2
Else
ShortToUnsigned = Value
End If
End Function
Function UnsignedToInteger(ByVal Value As UInteger) As Integer
If Value <= MAXINT_4 Then
UnsignedToInteger = Value
Else
UnsignedToInteger = Value - OFFSET_4
End If
End Function
Function IntegerToUnsigned(ByVal Value As Integer) As UInteger
If Value < 0 Then
IntegerToUnsigned = Value + OFFSET_4
Else
IntegerToUnsigned = Value
End If
End Function
'prende solo la parte positiva, se no 0
Function LongToUInt(ByVal Value As Long) As UInteger
If Value < 0 Then
LongToUInt = 0
Else
LongToUInt = CUInt(Value)
End If
End Function
'Public Function WordToByte(ByVal Word As Int16, ByVal LevelByte As Byte) As Byte
' Dim szTmp As String
' szTmp = Hex(Word)
' While Len(szTmp) < 4
' szTmp = "0" & szTmp
' End While
' If LevelByte = LOW_ORDER Then
' WordToByte = Val("&h" & Mid(szTmp, 3, 2))
' ElseIf LevelByte = HIGH_ORDER Then
' WordToByte = Val("&h" & Mid(szTmp, 1, 2))
' End If
'End Function
Public Function WordToByte(ByVal Word As UInt16, ByVal LevelByte As Byte) As Byte
Dim Value() As Byte = BitConverter.GetBytes(Word)
WordToByte = Value(LevelByte)
End Function
Public Function ShortToByte(ByVal [Short] As Int16, ByVal LevelByte As Byte) As Byte
Dim Value() As Byte = BitConverter.GetBytes([Short])
ShortToByte = Value(LevelByte)
End Function
Public Function ByteToWord(ByVal LowOrderByte As Byte, ByVal HighOrderByte As Byte) As UInt16
Dim Value() As Byte = {LowOrderByte, HighOrderByte}
ByteToWord = BitConverter.ToUInt16(Value, 0)
End Function
Public Function ByteToShort(ByVal LowOrderByte As Byte, ByVal HighOrderByte As Byte) As Int16
Dim Value() As Byte = {LowOrderByte, HighOrderByte}
ByteToShort = BitConverter.ToInt16(Value, 0)
End Function
Public Function UIntegerToSingle(ByVal [UInteger] As UInt32) As Single
Dim Value() As Byte = BitConverter.GetBytes([UInteger])
UIntegerToSingle = BitConverter.ToSingle(Value, 0)
End Function
Public Function SingleToUInteger(ByVal [Single] As Single) As UInt32
Dim Value() As Byte = BitConverter.GetBytes([Single])
SingleToUInteger = BitConverter.ToUInt32(Value, 0)
End Function
Public Function DWordToWord(ByVal DWord As UInt32, ByVal LevelWord As Byte) As UInt16
Dim Value() As Byte = BitConverter.GetBytes(DWord)
DWordToWord = ByteToWord(Value(0 + 2 * LevelWord), Value(1 + 2 * LevelWord))
End Function
Public Function DWordToShort(ByVal DWord As UInt32, ByVal LevelWord As Byte) As Int16
Dim Value() As Byte = BitConverter.GetBytes(DWord)
DWordToShort = ByteToShort(Value(0 + 2 * LevelWord), Value(1 + 2 * LevelWord))
End Function
Public Function IntegerToWord(ByVal [Integer] As Int32, ByVal LevelWord As Byte) As UInt16
Dim Value() As Byte = BitConverter.GetBytes([Integer])
IntegerToWord = ByteToWord(Value(0 + 2 * LevelWord), Value(1 + 2 * LevelWord))
End Function
Public Function IntegerToShort(ByVal [Integer] As Int32, ByVal LevelWord As Byte) As Int16
Dim Value() As Byte = BitConverter.GetBytes([Integer])
IntegerToShort = ByteToShort(Value(0 + 2 * LevelWord), Value(1 + 2 * LevelWord))
End Function
Public Function WordsToDWord(ByVal LowOrderWord As UInt16, ByVal HighOrderWord As UInt16) As UInt32
Dim ValueLow() As Byte = BitConverter.GetBytes(LowOrderWord)
Dim ValueHigh() As Byte = BitConverter.GetBytes(HighOrderWord)
Dim Value() As Byte = {ValueLow(0), ValueLow(1), ValueHigh(0), ValueHigh(1)}
WordsToDWord = BitConverter.ToUInt32(Value, 0)
End Function
Public Function WordsToInteger(ByVal LowOrderWord As UInt16, ByVal HighOrderWord As UInt16) As Int32
Dim ValueLow() As Byte = BitConverter.GetBytes(LowOrderWord)
Dim ValueHigh() As Byte = BitConverter.GetBytes(HighOrderWord)
Dim Value() As Byte = {ValueLow(0), ValueLow(1), ValueHigh(0), ValueHigh(1)}
WordsToInteger = BitConverter.ToInt32(Value, 0)
End Function
Public Function ShortsToDWord(ByVal LowOrderShort As Int16, ByVal HighOrderShort As Int16) As UInt32
Dim ValueLow() As Byte = BitConverter.GetBytes(LowOrderShort)
Dim ValueHigh() As Byte = BitConverter.GetBytes(HighOrderShort)
Dim Value() As Byte = {ValueLow(0), ValueLow(1), ValueHigh(0), ValueHigh(1)}
ShortsToDWord = BitConverter.ToUInt32(Value, 0)
End Function
Public Function ShortsToInteger(ByVal LowOrderShort As Int16, ByVal HighOrderShort As Int16) As Int32
Dim ValueLow() As Byte = BitConverter.GetBytes(LowOrderShort)
Dim ValueHigh() As Byte = BitConverter.GetBytes(HighOrderShort)
Dim Value() As Byte = {ValueLow(0), ValueLow(1), ValueHigh(0), ValueHigh(1)}
ShortsToInteger = BitConverter.ToInt32(Value, 0)
End Function
Function ArraysEqual(ByVal first As Int16(), ByVal second As Int16()) As Boolean
If (first Is second) Then
Return True
End If
If (first Is Nothing OrElse second Is Nothing) Then
Return False
End If
If (first.Length <> second.Length) Then
Return False
End If
For i As Integer = 0 To first.Length - 1
If (first(i) <> second(i)) Then
Return False
End If
Next i
Return True
End Function
End Module