Hvordan kan du konvertere hex to decimal hjælp VB.NET?

Jeg har brug for at konvertere hex til en decimal i VB.NET. Har fundet flere eksempler i C#, men da jeg forsøgte at konvertere til VB.NET jeg var ikke vellykket. Et eksempel på et hexadecimalt tal, at jeg forsøger at konvertere, er “A14152464C203230304232323020572F544947455234352E”.

Hvad nummer er du forventet? Der er 192 bits… meget større, end de fleste af de indbyggede typer…
(bemærk, jeg har tilføjet en kommentar re dit spørgsmål)

OriginalForfatteren user38349 | 2009-03-13

9 svar

  1. 6

    Der er en 24-byte (192-bit), tal; hvad værdi er, som du forventede?

    Bemærk, at du kan bruge Convert til at gøre en masse af grungy arbejde her – for eksempel (i 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);
        }

    Hvordan du får fra raw til et nummer, afhænger af, hvad du mener, at antallet er…

    Visual Basic oversættelse høflighed af .NET Reflektor (selv om de “-1” ser underligt ud):

    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
    Jeg ved ikke, hvad de bør være. Lockhead Martin bare igang med at sende disse data, og de er ikke færdige med dokumentationen. Vi slags i en discovery-tilstand på dette tidspunkt. Skal jeg blot opsummere de Rå(i) værdier for at få den numeriske?
    Nej, det ville være dårligt… problemet er: hvad gør man med 192 bits? der kan være 3 længes (Int64), 6 ints (Int32), 2 decimaler, en BigInteger osv… men er det big-endian, little-endian, osv… afkode binære behov for en lille smule viden om kilden.
    Den -1 er korrekt, VB array erklæring syntaks giver den øvre grænse for den matrix, der henviser til, at C# giver antallet af elementer i arrayet. Da array er nul-baseret den øvre grænse er én mindre end antallet af poster.
    Lige for at tilføje, .NET ‘ s System.Numeralier.BigInteger struktur bør være i stand til at indtage en sådan værdi, nemt via TryParse metode, der giver dig mulighed for at angive antallet stilarter. Det er en underskrevet version, selv om. Så hvis din hex nummer er virkelig usigneret, du måske nødt til at gennemføre en lille wrapper omkring BigInteger til at håndtere den underskrevne element og derefter sende det tilbage.

    OriginalForfatteren Marc Gravell

  2. 15

    For hex-værdier, der faktisk ikke kræver en bignum klasse til at arbejde med, kan du bruge de normale konvertering funktion, men præfiks nummer med “&H”. VB fortolker “&H” i teksten, som betyder “dette er et hex-tal”, ligesom det gør i koden.

    dim n = Cint("&H" & text)

    OriginalForfatteren Craig Gidney

  3. 4

    Du kan bruge Val funktion i Visual Basic til at konvertere en hexadecimal værdi til en decimal værdi. Dette er gjort ved at foranstille streng med "&H", at fortælle Visual Basic, at dette er en hexadecimal værdi, og derefter konvertere det til et nummer.

    Dim Value As Integer = Val("&H" & YourHexadecimalStringHere)

    OriginalForfatteren Mathias Lykkegaard Lorenzen

  4. 1

    Dette vil konvertere din streng i et array af byte:

    Dim hex As String = "A14152464C203230304232323020572F544947455234352E"
    
    Dim len As Integer = hex.Length \ 2
    Dim data(len - 1) As Byte
    For i As Integer = 0 to len - 1
       data(i) = Convert.ToByte(hex.Substring(i * 2, 2), 16)
    Next

    OriginalForfatteren Guffa

  5. 1
    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

    OriginalForfatteren dbasnett

  6. 1
        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

    Dette vil ikke arbejde for Decimal, og Hex er for lang for heltal… men du får den idé. Du kunne dele det og genforenes.

    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

    OriginalForfatteren klkitchens

  7. 1

    Skrive en selv.

    Du bliver nødt til at demontere den streng, start derefter fra højre, og arbejde din vej til venstre.

    int weight = 1;
    While Looping
    {
    
      If (token(i) == "F") { DecimalValue += 15 * weight; }
      If (token(i) == "E") { DecimalValue += 14 * weight; }
      If (token(i) == "D") { DecimalValue += 13 * weight; }
      If (token(i) == "C") { DecimalValue += 12 * weight; }
      If (token(i) == "B") { DecimalValue += 11 * weight; }
      If (token(i) == "A") { DecimalValue += 10 * weight; }
      else { DecimalValue += token(i) * weight; }
    
      weight = weight * 16;
    }

    Noget lignende.

    OriginalForfatteren jgallant

  8. 1

    Prøvet de andre svar, og dette var den eneste, der virkede for mig:

        Convert.ToInt32(yourHEXString, 16)

    Dokumentation

    OriginalForfatteren VGs

  9. 0
    Dim hex As String = "A1B2C3D4"
    Dim int As Integer = Val("&H" & hex)

    OriginalForfatteren Miled Feghali

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *