⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 conversion.vb

📁 大名鼎鼎的mono是.NET平台的跨平台(支持linux
💻 VB
📖 第 1 页 / 共 2 页
字号:
                        Return Oct(Convert.ToSByte(Number))                    Case TypeCode.UInt16                        Return Oct(Convert.ToUInt16(Number))                    Case TypeCode.UInt32                        Return Oct(Convert.ToUInt32(Number))                    Case TypeCode.UInt64                        Return Oct(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        Public Function Oct(ByVal Number As Short) As String            Return Convert.ToString(Number, 8).ToUpper        End Function        Public Function Str(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 Byte Then                If Convert.ToByte(Number) > 0 Then                    Return " " + Convert.ToString(Number, CultureInfo.InvariantCulture)                Else                    Return Convert.ToString(Number, CultureInfo.InvariantCulture)                End If            ElseIf TypeOf Number Is Short Then                If Convert.ToInt16(Number) > 0 Then                    Return " " + Convert.ToString(Number, CultureInfo.InvariantCulture)                Else                    Return Convert.ToString(Number, CultureInfo.InvariantCulture)                End If            ElseIf TypeOf Number Is Integer Then                If Convert.ToInt32(Number) > 0 Then                    Return " " + Convert.ToString(Number, CultureInfo.InvariantCulture)                Else                    Return Convert.ToString(Number, CultureInfo.InvariantCulture)                End If            ElseIf TypeOf Number Is Long Then                If Convert.ToInt64(Number) > 0 Then                    Return " " + Convert.ToString(Number, CultureInfo.InvariantCulture)                Else                    Return Convert.ToString(Number, CultureInfo.InvariantCulture)                End If            ElseIf TypeOf Number Is Double Then                If Convert.ToDouble(Number) > 0 Then                    Return " " + Convert.ToString(Number, CultureInfo.InvariantCulture)                Else                    Return Convert.ToString(Number, CultureInfo.InvariantCulture)                End If            ElseIf TypeOf Number Is Decimal Then                If Convert.ToDecimal(Number) > 0 Then                    Return " " + Convert.ToString(Number, CultureInfo.InvariantCulture)                Else                    Return Convert.ToString(Number, CultureInfo.InvariantCulture)                End If            ElseIf TypeOf Number Is Single Then                If Convert.ToSingle(Number) > 0 Then                    Return " " + Convert.ToString(Number, CultureInfo.InvariantCulture)                Else                    Return Convert.ToString(Number, CultureInfo.InvariantCulture)                End If            ElseIf TypeOf Number Is String Then                Throw New System.NullReferenceException("Object reference not set to an instance of an object.")            Else                Throw New System.InvalidCastException("Argument 'Number' cannot be converted to a numeric value.")            End If        End Function        Public Function Val(ByVal Expression As Char) As Integer            'only '0' - '9' are acceptable            If Strings.Asc(Expression) >= Strings.Asc("0"c) And Strings.Asc(Expression) <= Strings.Asc("9"c) Then                Return Strings.Asc(Expression) - Strings.Asc("0"c)            Else                'everything else is 0                Return 0            End If        End Function        Public Function Val(ByVal Expression As Object) As Double            If Expression Is Nothing Then                Return Val("")            End If            If TypeOf Expression Is Char Then                Return Val(Convert.ToChar(Expression))            ElseIf TypeOf Expression Is String Then                Return Val(Convert.ToString(Expression))            ElseIf TypeOf Expression Is Boolean Then                Return Val(Convert.ToString((-1) * Convert.ToInt16(Expression)))                'FIXME: add more types. Return Val(StringType.FromObject(Expression))            Else                Throw New System.ArgumentException("Argument 'Expression' cannot be converted to type '" + Expression.GetType.FullName + "'.")            End If        End Function        Public Function Val(ByVal InputStr As String) As Double            If InputStr Is Nothing Then                InputStr = ""            End If#If TRACE Then            Console.WriteLine("TRACE:Conversion.Val:input:" + InputStr)#End If            '            ' loop on InputStr chars            Dim pos As Integer              ' char iterator            Dim CurrentChar As Char         ' current char            Dim CurrentCharAsc As Integer   ' current ascii value of char            Dim NumericString As String = ""            Dim PeriodCollected As Boolean ' did we already collected a Period ?            ' Is it a positive/negative decimal or Hex or Oct            ' start as negative. the first one who turns into True, wins.            Dim IsNegative As Boolean = False            Dim IsDecimal As Boolean = False            Dim IsHex As Boolean = False            Dim IsOct As Boolean = False            Dim IsE As Boolean            '            ' Loop on string and decide what is the base of the number.            ' trim all left whitespace             '            For pos = 0 To InputStr.Length - 1                CurrentChar = Convert.ToChar(InputStr.Substring(pos, 1))                If System.Char.IsWhiteSpace(CurrentChar) Then                    'do nothing. continue                ElseIf System.Char.IsDigit(CurrentChar) Then                    'its decimal. exit loop                    IsDecimal = True                    pos = InputStr.Length                ElseIf CurrentChar = "-" Then                    IsNegative = True                ElseIf CurrentChar = "&" Then                    'if this is not the last char,                     'take the next char and see if radix is H or O                    If pos < InputStr.Length - 1 Then                        CurrentChar = Convert.ToChar(InputStr.Substring(pos + 1, 1))                        If CurrentChar = "H" Or CurrentChar = "h" Then                            'its Hex. exit loop                            IsHex = True                            pos = InputStr.Length                        ElseIf CurrentChar = "O" Or CurrentChar = "o" Then                            'its Oct. exit loop                            IsOct = True                            pos = InputStr.Length                        Else                            'its bad. return 0.                            Return 0                        End If                    End If                Else                    'the string didn't start with a digit or &H or &O                    'its bad. return 0.                    Return 0                End If            Next#If TRACE Then            Console.WriteLine("TRACE:Conversion.Val:IsDecimal:" + IsDecimal.ToString() + "IsHex:" + IsHex.ToString() + "IsOct:" + IsOct.ToString())#End If            For pos = 0 To InputStr.Length - 1                CurrentChar = Convert.ToChar(InputStr.Substring(pos, 1))                CurrentCharAsc = Strings.Asc(CurrentChar)                'collect numbers and one period, ignore whitespaces, stop on other                If IsDecimal Then                    If System.Char.IsWhiteSpace(CurrentChar) Then                        'ignore this char                    ElseIf CurrentChar = "-" Then                        IsNegative = True                    ElseIf System.Char.IsDigit(CurrentChar) Then                        'collect this char                        NumericString = NumericString + CurrentChar                    ElseIf CurrentChar = "." Then                        'The Val function recognizes only the period (.) as a valid decimal separator                        If Not PeriodCollected Then                            NumericString = NumericString + CurrentChar                            PeriodCollected = True                        Else                            'period already collected. exit the loop.                            pos = InputStr.Length                        End If                    ElseIf IsE = False AndAlso (CurrentChar = "E"c OrElse CurrentChar = "e"c) Then                        IsE = True                        NumericString &= CurrentChar                    ElseIf IsE AndAlso CurrentChar = "+" Then                        'ignore this                    Else                        'exit the loop                        pos = InputStr.Length                    End If                ElseIf IsHex Then                    If System.Char.IsWhiteSpace(CurrentChar) Or CurrentChar = "&" Or CurrentChar = "H" Or CurrentChar = "h" Then                        'ignore this char                    ElseIf NumericString.Length = 16 Then                        'max hex chars is 16. exit the loop.                        pos = InputStr.Length                    ElseIf System.Char.IsDigit(CurrentChar) Then                        'collect this char                        NumericString = NumericString + CurrentChar                    ElseIf ((CurrentCharAsc >= Strings.Asc("A")) And (CurrentCharAsc <= Strings.Asc("F"))) Or _                        ((CurrentCharAsc >= Strings.Asc("a")) And (CurrentCharAsc <= Strings.Asc("f"))) Then                        'collect this char                        NumericString = NumericString + CurrentChar                    Else                        'exit the loop.                        pos = InputStr.Length                    End If                ElseIf IsOct Then                    If System.Char.IsWhiteSpace(CurrentChar) Or CurrentChar = "&" Or CurrentChar = "O" Or CurrentChar = "o" Then                        'ignore this char                    ElseIf ((CurrentCharAsc >= Strings.Asc("0")) And (CurrentCharAsc <= Strings.Asc("7"))) Then                        'collect this char                        NumericString = NumericString + CurrentChar                    Else                        'exit the loop                        pos = InputStr.Length                    End If                Else                    Throw New NotSupportedException("FIXME")                End If            Next pos#If TRACE Then            Console.WriteLine("TRACE:Conversion.Val:collected string:" + NumericString)#End If            'convert the NumericString back to long            'FIXME:the Val return double but it seems to cast to long. add a test and check that.            Dim retVal As Double = 0            If NumericString.Length > 0 Then                If IsDecimal Then                    retVal = Convert.ToDouble(NumericString, New CultureInfo("en-US"))                    If IsNegative Then retVal = (-1) * retVal                ElseIf IsHex Then                    NumericString = NumericString.ToUpper                    Dim NumericStringLength As Integer = NumericString.Length                    If (NumericStringLength = 4 Or NumericStringLength = 8 Or NumericStringLength >= 16) And NumericString.StartsWith("F") Then                        'its negative                        If NumericStringLength = 4 Then retVal = Convert.ToDouble(Convert.ToInt64(NumericString, 16)) - Math.Pow(2, 16)                        If NumericStringLength = 8 Then retVal = Convert.ToDouble(Convert.ToInt64(NumericString, 16)) - Math.Pow(2, 32)                        If NumericStringLength >= 16 Then retVal = Convert.ToDouble(Convert.ToInt64(NumericString, 16))                    Else                        retVal = Convert.ToDouble(Convert.ToInt64(NumericString, 16))                    End If                ElseIf IsOct Then                    retVal = Convert.ToInt64(NumericString, 8)                Else                    'FIXME: what else ?                End If            End If            Return retVal            'exceptions            'FIXME:OverflowException - InputStr is too large.            'FIXME:InvalidCastException - Number is badly formed.             'FIXME:ArgumentException - Object type expression not convertible to String.        End Function#If NET_2_0 Then        <CLSCompliant(False)> _        Public Function Hex(ByVal Number As SByte) As String            Return Convert.ToString(Number, 16).ToUpper        End Function        <CLSCompliant(False)> _        Public Function Hex(ByVal Number As UShort) As String            Return Convert.ToString(Number, 16).ToUpper        End Function        <CLSCompliant(False)> _        Public Function Hex(ByVal Number As UInteger) As String            Return Convert.ToString(Number, 16).ToUpper        End Function        <CLSCompliant(False)> _        Public Function Hex(ByVal Number As ULong) As String            Return Convert.ToString(CLng(Number), 16).ToUpper        End Function        <CLSCompliant(False)> _        Public Function Oct(ByVal Number As SByte) As String            Return Convert.ToString(Number, 8).ToUpper        End Function        <CLSCompliant(False)> _        Public Function Oct(ByVal Number As UShort) As String            Return Convert.ToString(Number, 8).ToUpper        End Function        <CLSCompliant(False)> _        Public Function Oct(ByVal Number As UInteger) As String            Return Convert.ToString(Number, 8).ToUpper        End Function        <CLSCompliant(False)> _        Public Function Oct(ByVal Number As ULong) As String            Return Convert.ToString(CLng(Number), 8).ToUpper        End Function#End If    End ModuleEnd Namespace

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -