168 lines
6.1 KiB
VB.net
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
|