How do you convert hex to decimal using VB.NET?

后端 未结 9 1791
自闭症患者
自闭症患者 2020-12-11 03:04

I need to convert hex to a decimal in VB.NET. Found several examples in C#, but when I tried to convert to VB.NET I was not successful. An example of a hexadecimal number th

相关标签:
9条回答
  • 2020-12-11 03:10
    Private Function toByte(ByVal Shex As String) As List(Of Byte)
        Const cvtCH As Integer = 2
        Dim retval As New List(Of Byte)
        Dim rmndr As Integer
        rmndr = Shex.Length Mod cvtCH
        If rmndr <> 0 Then Shex = Shex.PadLeft(Shex.Length + cvtCH - rmndr, "0"c)
        For x As Integer = 0 To Shex.Length - 1 Step cvtCH
            retval.Add(Convert.ToByte(Shex.Substring(x, cvtCH), 16))
        Next
        Return retval
    End Function
    Private Function toU32(ByVal Shex As String) As List(Of UInt32)
        Const cvtCH As Integer = 8
        Dim retval As New List(Of UInt32)
        Dim rmndr As Integer
        rmndr = Shex.Length Mod cvtCH
        If rmndr <> 0 Then Shex = Shex.PadLeft(Shex.Length + cvtCH - rmndr, "0"c)
        For x As Integer = 0 To Shex.Length - 1 Step cvtCH
            retval.Add(Convert.ToUInt32(Shex.Substring(x, cvtCH), 16))
        Next
        Return retval
    End Function
    Private Function toU64(ByVal Shex As String) As List(Of UInt64)
        Const cvtCH As Integer = 16
        Dim retval As New List(Of UInt64)
        Dim rmndr As Integer
        rmndr = Shex.Length Mod cvtCH
        If rmndr <> 0 Then Shex = Shex.PadLeft(Shex.Length + cvtCH - rmndr, "0"c)
        For x As Integer = 0 To Shex.Length - 1 Step cvtCH
            retval.Add(Convert.ToUInt64(Shex.Substring(x, cvtCH), 16))
        Next
        Return retval
    End Function
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'unsigned 32 bit max = FFFFFFFF
        'unsigned 64 bit max = FFFFFFFF
        'signed 32 bit max = 7FFFFFFF
        'signed 64 bit max = 7FFFFFFF
        Dim hexS As String = "A14152464C203230304232323020572F544947455234352E"
        Dim hexS2 As String = "A14152464C203230304232323020572F54494745523435"
        toByte(hexS)
        toU32(hexS)
        toU64(hexS)
    End Sub
    
    0 讨论(0)
  • 2020-12-11 03:11

    Tried the others replies and this was the one that worked for me:

        Convert.ToInt32(yourHEXString, 16)
    

    Documentation

    0 讨论(0)
  • 2020-12-11 03:16
    Dim hex As String = "A1B2C3D4"
    Dim int As Integer = Val("&H" & hex)
    
    0 讨论(0)
  • 2020-12-11 03:22
        Dim hex As String
        hex = "A14152464C203230304232323020572F544947455234352E"
    
        Dim dec As Long
        Dim hexpart As String
        For x As Integer = 1 To (hex.Length / 2)
    
            hexpart = hex.Substring((x * 2) - 2, 2)
            dec = Int32.Parse(hexpart, System.Globalization.NumberStyles.HexNumber)
    
            Debug.Print("Hex = " + hex + ",HexPart = " + hexpart + ", Dec = " + dec.ToString + Environment.NewLine)
        Next
    

    This won't work for Decimal and the Hex is too long for integer... but you get the idea. You could split it and recombine.

    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = A1, Dec = 161
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 41, Dec = 65
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 52, Dec = 82
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 46, Dec = 70
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 4C, Dec = 76
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 20, Dec = 32
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 32, Dec = 50
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 30, Dec = 48
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 30, Dec = 48
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 42, Dec = 66
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 32, Dec = 50
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 32, Dec = 50
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 30, Dec = 48
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 20, Dec = 32
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 57, Dec = 87
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 2F, Dec = 47
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 54, Dec = 84
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 49, Dec = 73
    Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 47, Dec = 71
    
    0 讨论(0)
  • 2020-12-11 03:26

    That is a 24-byte (192-bit) number; what value are you expecting?

    Note that you can use Convert to do a lot of the grungy work here - for example (in C#):

        string hex = "A14152464C203230304232323020572F544947455234352E";
        byte[] raw = new byte[hex.Length / 2];
        for (int i = 0; i < raw.Length ; i++)
        {
            raw[i] = Convert.ToByte(hex.Substring(i * 2,2), 16);
        }
    

    How you get from raw to a number depends on what you think the number is...

    Visual Basic translation courtesy of .NET Reflector (although the "-1" looks odd):

    Dim hex As String = "A14152464C203230304232323020572F544947455234352E"
    Dim raw As Byte() = New Byte((hex.Length / 2)  - 1) {}
    Dim i As Integer
    For i = 0 To raw.Length - 1
        raw(i) = Convert.ToByte(hex.Substring((i * 2), 2), &H10)
    Next i
    
    0 讨论(0)
  • 2020-12-11 03:28

    For hex values which don't actually require a bignum class to work with, you can use the normal conversion function but prefix the number with "&H". VB interprets "&H" in the text as meaning "this is a hex number", just like it does in code.

    dim n = Cint("&H" & text)
    
    0 讨论(0)
提交回复
热议问题