📄 conversion.vb
字号:
'' Conversion.vb'' Author:' Mizrahi Rafael (rafim@mainsoft.com)' Guy Cohen (guyc@mainsoft.com)'' Copyright (C) 2002-2006 Mainsoft Corporation.' Copyright (C) 2004-2006 Novell, Inc (http://www.novell.com)'' Permission is hereby granted, free of charge, to any person obtaining' a copy of this software and associated documentation files (the' "Software"), to deal in the Software without restriction, including' without limitation the rights to use, copy, modify, merge, publish,' distribute, sublicense, and/or sell copies of the Software, and to' permit persons to whom the Software is furnished to do so, subject to' the following conditions:' ' The above copyright notice and this permission notice shall be' included in all copies or substantial portions of the Software.' ' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF' MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE' LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION' OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION' WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.'Imports SystemImports System.ReflectionImports Microsoft.VisualBasic.CompilerServicesImports System.GlobalizationNamespace Microsoft.VisualBasic Public Module Conversion Public Function ErrorToString() As String Return Information.Err.Description End Function Public Function ErrorToString(ByVal ErrorNumber As Integer) As String Dim rm As New Resources.ResourceManager("strings", [Assembly].GetExecutingAssembly()) Dim strDescription As String#If TRACE Then Console.WriteLine("TRACE:Conversion.ErrorToString:input:" + ErrorNumber.ToString())#End If 'FIXMSDN: If (ErrorNumber < 0) Or (ErrorNumber >= 65535) Then If (ErrorNumber >= 65535) Then Throw New ArgumentException("Error number must be within the range 0 to 65535.") End If If (ErrorNumber = 0) Then Return "" End If strDescription = rm.GetString("ERR" + ErrorNumber.ToString()) 'Application-defined or object-defined error. If strDescription Is Nothing Then strDescription = rm.GetString("ERR95") End If Return strDescription End Function Public Function Fix(ByVal Number As Decimal) As Decimal Return Math.Sign(Number) * Conversion.Int(System.Math.Abs(Number)) End Function Public Function Fix(ByVal Number As Double) As Double Return Math.Sign(Number) * Conversion.Int(System.Math.Abs(Number)) End Function Public Function Fix(ByVal Number As Integer) As Integer Return Number End Function Public Function Fix(ByVal Number As Long) As Long Return Number End Function Public Function Fix(ByVal Number As Object) As Object 'FIXME:ArgumentException 5 Number is not a numeric type. If Number Is Nothing Then Throw New ArgumentNullException("Number", "Value can not be null.") End If If TypeOf Number Is Byte Then Return Conversion.Fix(Convert.ToByte(Number)) ElseIf TypeOf Number Is Boolean Then If (Convert.ToBoolean(Number)) Then Return 1 End If Return 0 ElseIf TypeOf Number Is Long Then Return Conversion.Fix(Convert.ToInt64(Number)) ElseIf TypeOf Number Is Decimal Then Return Conversion.Fix(Convert.ToDecimal(Number)) ElseIf TypeOf Number Is Short Then Return Conversion.Fix(Convert.ToInt16(Number)) ElseIf TypeOf Number Is Integer Then Return Conversion.Fix(Convert.ToInt32(Number)) ElseIf TypeOf Number Is Double Then Return Conversion.Fix(Convert.ToDouble(Number)) ElseIf TypeOf Number Is Single Then Return Conversion.Fix(Convert.ToSingle(Number)) ElseIf TypeOf Number Is String Then Return Conversion.Fix(DoubleType.FromString(Number.ToString())) ElseIf TypeOf Number Is Char Then Return Conversion.Fix(DoubleType.FromString(Number.ToString())) Else 'Date, Object Throw New System.ArgumentException("Type of argument 'Number' is '" + Number.GetType.FullName + "', which is not numeric.") End If End Function Public Function Fix(ByVal Number As Short) As Short Return Number End Function Public Function Fix(ByVal Number As Single) As Single Return Math.Sign(Number) * Conversion.Int(System.Math.Abs(Number)) End Function Public Function Hex(ByVal Number As Byte) As String Return Convert.ToString(Number, 16).ToUpper End Function Public Function Hex(ByVal Number As Integer) As String Return Convert.ToString(Number, 16).ToUpper End Function Public Function Hex(ByVal Number As Long) As String Return Convert.ToString(Number, 16).ToUpper End Function Public Function Hex(ByVal Number As Short) As String Return Convert.ToString(Number, 16).ToUpper End Function Public Function Hex(ByVal Number As Object) As String If Number Is Nothing Then Throw New System.ArgumentNullException("Number", "Value cannot be null.") End If If (TypeOf Number Is IConvertible) Then Dim tc As TypeCode = CType(Number, IConvertible).GetTypeCode() Select Case tc Case TypeCode.Byte Return Hex(Convert.ToByte(Number)) Case TypeCode.Decimal Return Hex(SizeDown(Convert.ToInt64(Number))) Case TypeCode.Double Return Hex(SizeDown(Convert.ToInt64(Number))) Case TypeCode.Int16 Return Hex(Convert.ToInt16(Number)) Case TypeCode.Int32 Return Hex(Convert.ToInt32(Number)) Case TypeCode.Int64 Return Hex(Convert.ToInt64(Number)) Case TypeCode.Single Return Hex(SizeDown(Convert.ToInt32(Number))) Case TypeCode.String Dim strNumber As String strNumber = Number.ToString If strNumber.StartsWith("&") Then If strNumber.Substring(1, 1).ToUpper = "O" Then Return Hex(SizeDown(Convert.ToInt64(strNumber.Substring(2), 8))) ElseIf strNumber.Substring(1, 1).ToUpper = "H" Then Return Hex(SizeDown(Convert.ToInt64(strNumber.Substring(2), 16))) Else Return Hex(SizeDown(Convert.ToInt64(Number))) End If Else Return Hex(SizeDown(Convert.ToInt64(Number))) End If#If NET_2_0 Then Case TypeCode.SByte Return Hex(Convert.ToSByte(Number)) Case TypeCode.UInt16 Return Hex(Convert.ToUInt16(Number)) Case TypeCode.UInt32 Return Hex(Convert.ToUInt32(Number)) Case TypeCode.UInt64 Return Hex(Convert.ToUInt64(Number))#End If Case Else Throw New System.ArgumentException("Argument 'Number' cannot be converted to type '" + Number.GetType.FullName + "'.") End Select Else Throw New System.ArgumentException("Argument 'Number' is not a number.") End If End Function Private Function SizeDown(ByVal num As Long) As Object 'If (num <= Byte.MaxValue And num >= 0) Then ' Return CType(num, Byte) 'End If 'If (num <= SByte.MaxValue And num >= SByte.MinValue) Then ' Return CType(num, SByte) 'End If 'If (num <= Int16.MaxValue And num >= Int16.MinValue) Then ' Return CType(num, Int16) 'End If 'If (num <= UInt16.MaxValue And num >= 0) Then ' Return CType(num, UInt16) 'End If If (num <= Int32.MaxValue And num >= Int32.MinValue) Then Return CType(num, Int32) End If#If NET_VER >= 2.0 Then If (num <= UInt32.MaxValue And num >= 0) Then Return CType(num, UInt32) End If#End If Return num End Function Public Function Int(ByVal Number As Decimal) As Decimal Return Decimal.Floor(Number) End Function Public Function Int(ByVal Number As Double) As Double Return Math.Floor(Number) End Function Public Function Int(ByVal Number As Integer) As Integer Return Number End Function Public Function Int(ByVal Number As Long) As Long Return Number End Function Public Function Int(ByVal Number As Object) As Object 'FIXME:ArgumentException 5 Number is not a numeric type. If Number Is Nothing Then Throw New ArgumentNullException("Number", "Value can not be null.") End If If TypeOf Number Is Byte Then Return Conversion.Int(Convert.ToByte(Number)) ElseIf TypeOf Number Is Boolean Then Return Conversion.Int(Convert.ToDouble(Number)) ElseIf TypeOf Number Is Long Then Return Conversion.Int(Convert.ToInt64(Number)) ElseIf TypeOf Number Is Decimal Then Return Conversion.Int(Convert.ToDecimal(Number)) ElseIf TypeOf Number Is Short Then Return Conversion.Int(Convert.ToInt16(Number)) ElseIf TypeOf Number Is Integer Then Return Conversion.Int(Convert.ToInt32(Number)) ElseIf TypeOf Number Is Double Then Return Conversion.Int(Convert.ToDouble(Number)) ElseIf TypeOf Number Is Single Then Return Conversion.Int(Convert.ToSingle(Number)) ElseIf TypeOf Number Is String Then Return Conversion.Int(Convert.ToDouble(Number)) ElseIf TypeOf Number Is Char Then Return Conversion.Int(Convert.ToInt16(Number)) Else 'Date, Object Throw New System.ArgumentException("Type of argument 'Number' is '" + Number.GetType.FullName + "', which is not numeric.") End If End Function Public Function Int(ByVal Number As Short) As Short Return Number End Function Public Function Int(ByVal Number As Single) As Single Return System.Convert.ToSingle(Math.Floor(Number)) End Function Public Function Oct(ByVal Number As Byte) As String Return Convert.ToString(Number, 8).ToUpper End Function Public Function Oct(ByVal Number As Integer) As String Return Convert.ToString(Number, 8).ToUpper End Function Public Function Oct(ByVal Number As Long) As String Return Convert.ToString(Number, 8).ToUpper End Function Public Function Oct(ByVal Number As Object) As String If Number Is Nothing Then Throw New System.ArgumentNullException("Number", "Value cannot be null.") End If If (TypeOf Number Is IConvertible) Then Dim tc As TypeCode = CType(Number, IConvertible).GetTypeCode() Select Case tc Case TypeCode.Byte Return Oct(Convert.ToByte(Number)) Case TypeCode.Decimal Return Oct(SizeDown(Convert.ToInt64(Number))) Case TypeCode.Double Return Oct(SizeDown(Convert.ToInt64(Number))) Case TypeCode.Int16 Return Oct(Convert.ToInt16(Number)) Case TypeCode.Int32 Return Oct(Convert.ToInt32(Number)) Case TypeCode.Int64 Return Oct(Convert.ToInt64(Number)) Case TypeCode.Single Return Oct(SizeDown(Convert.ToInt32(Number))) Case TypeCode.String Dim strNumber As String strNumber = Number.ToString If strNumber.StartsWith("&") Then If strNumber.Substring(1, 1).ToUpper = "O" Then Return Oct(SizeDown(Convert.ToInt64(strNumber.Substring(2), 8))) ElseIf strNumber.Substring(1, 1).ToUpper = "H" Then Return Oct(SizeDown(Convert.ToInt64(strNumber.Substring(2), 16))) Else Return Oct(SizeDown(Convert.ToInt64(Number))) End If Else Return Oct(SizeDown(Convert.ToInt64(Number))) End If#If NET_2_0 Then Case TypeCode.SByte
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -