Necesito convertir el hexadecimal a un decimal en VB.NET. Encontré varios ejemplos en C#, pero cuando traté de convertir a VB.NET, no tuve éxito. Un ejemplo de un número hexadecimal que intento convertir es "A14152464C203230304232323020572F544947455234352E".¿Cómo se convierte hexadecimal a decimal usando VB.NET?
Respuesta
Ese es un número de 24 bytes (192 bits); ¿Qué valor esperas?
Tenga en cuenta que puede utilizar Convert
hacer una gran parte del trabajo sucio aquí - por ejemplo (en 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);
}
¿Cómo se obtiene a partir raw
a un número depende de lo que usted piensa que el número es ...
Visual cortesía básica traducción de .NET Reflector (aunque el "-1" se ve impar):
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
No sé cuál debe ser el número. Lockhead Martin acaba de comenzar a enviar estos datos y no han terminado la documentación. Estamos en un modo de descubrimiento en este momento. ¿Debo resumir los valores Raw (i) para obtener el valor numérico? – user38349
No; eso sería malo ... el problema es: ¿qué hacer con 192 bits?eso podría ser 3 largos (Int64), 6 ints (Int32), 2 decimales, un BigInteger, etc. ... pero ¿es big-endian, little-endian, etc. ... el binario de decodificación necesita un * poco * de conocimiento sobre la fuente. –
El -1 es correcto, la sintaxis de la declaración de matriz VB proporciona el límite superior de la matriz, mientras que C# proporciona la cantidad de elementos en la matriz. Como la matriz está basada en cero, el límite superior es uno menos que el número de elementos. – MarkJ
Escriba uno usted mismo.
Deberá tokenizar la cadena, luego comenzar desde la derecha, y seguir su camino hacia la izquierda.
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;
}
Algo así.
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
Esto no funcionará para Decimal y el maleficio es demasiado largo para un número entero ... pero se entiende. Podrías dividirlo y recombinarlo.
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
Esto convertirá sus s Tring en una matriz de bytes:
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
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
Para valores hexadecimales que en realidad no requieren una clase bignum para trabajar con, puede utilizar la función de conversión normal, pero prefijar el número con "& H". VB interpreta "& H" en el texto como "este es un número hexadecimal", tal como lo hace en el código.
dim n = Cint("&H" & text)
Usted puede utilizar la función Val
en Visual Basic para convertir un valor hexadecimal en un valor decimal. Esto se hace prefijando la cadena con "&H"
, para decirle a Visual Basic que este es un valor hexadecimal y luego conviértalo en un número.
Dim Value As Integer = Val("&H" & YourHexadecimalStringHere)
Dim hex As String = "A1B2C3D4"
Dim int As Integer = Val("&H" & hex)
probado los otros respuestas y esto fue el que trabajó para mí:
Convert.ToInt32(yourHEXString, 16)
- 1. Python convierte decimal a hexadecimal
- 2. ¿Cómo convierto hexadecimal a decimal en Python?
- 3. hexadecimal a 64 decimal firmado
- 4. Python Convierte fracción a decimal
- 5. hexadecimal la conversión a decimal
- 6. C# - Convierte decimal a int32
- 7. C# convierte entero a hexadecimal y viceversa
- 8. Convertir decimal a hexadecimal con Erlang?
- 9. De decimal a hexadecimal en python
- 10. PHP convierte decimal a fracción y viceversa?
- 11. ¿Cómo convertir números entre hexadecimal y decimal en C#?
- 12. ¿Cómo puedo convertir un número decimal a hexadecimal en VIM?
- 13. Cómo convertir hexadecimal a decimal en una declaración de sustitución?
- 14. Oracle: ¿Cómo convierto hexadecimal a decimal en Oracle SQL?
- 15. ¿Cómo se convierte una fracción a binaria?
- 16. VB.NET ¿Cómo puedo reducir int a 1 lugar decimal?
- 17. ¿Convertir entero/decimal a hexadecimal en un Arduino?
- 18. C - Convierte long int a cadena hexadecimal firmado
- 19. Dividir un 'Decimal' en VB.NET
- 20. Declarar una constante hexadecimal en VB.NET
- 21. Conversión de hexadecimal a decimal en el ceceo común
- 22. Objetivo-C Decimal a Base 16 Conversión hexadecimal
- 23. Imprimir variables en formato hexadecimal o decimal
- 24. cómo analizar hexadecimal o decimal int en Python
- 25. ¿Cómo se ve la cadena hexadecimal SHA256?
- 26. ¿Cómo se convierte cstring a NSString?
- 27. ¿Cómo se convierte LPCWSTR a const char *?
- 28. ¿Cómo se manipula un valor hexadecimal a nivel de bits?
- 29. ¿Cómo convertir manualmente el valor decimal a cadena hexadecimal en C?
- 30. Cómo imprimir bytes en hexadecimal usando System.out.println?
¿Qué número está esperando? Eso es 192 bits ... mucho más grande que la mayoría de los tipos incorporados ... –
(nota, agregué un comentario a su pregunta) –