如何使用VB.NET将十六进制转换为十进制?

如何使用VB.NET将十六进制转换为十进制?,.net,vb.net,.net,Vb.net,我需要把十六进制转换成十进制。在C#中找到了几个示例,但当我尝试转换到VB.NET时,没有成功。我试图转换的十六进制数的一个例子是“A14152464C2030304232323020572F544947455352E”。自己写一个 您需要对字符串进行标记,然后从右侧开始,然后向左进行操作 int weight = 1; While Looping { If (token(i) == "F") { DecimalValue += 15 * weight; } If (token(i)

我需要把十六进制转换成十进制。在C#中找到了几个示例,但当我尝试转换到VB.NET时,没有成功。我试图转换的十六进制数的一个例子是“A14152464C2030304232323020572F544947455352E”。

自己写一个

您需要对字符串进行标记,然后从右侧开始,然后向左进行操作

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;
}
差不多吧

    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
这不适用于十进制,十六进制对于整数太长。。。但你明白了。你可以将其拆分并重新组合

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
这是一个24字节(192位)的数字;你期望的价值是什么

请注意,您可以使用
Convert
在此处执行大量繁重的工作-例如(在C#中):


这将把字符串转换为字节数组:

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
私有函数toByte(ByVal Shex作为字符串)作为列表(字节)
常数cvtCH为整数=2
Dim retval作为新列表(字节数)
作为整数的Dim rmndr
rmndr=剪切长度模块cvtCH
如果rmndr为0,则Shex=Shex.PADLEVT(Shex.Length+cvtCH-rmndr,“0”c)
对于x为整数=0至设定长度-1步cvtCH
retval.Add(Convert.ToByte(Shex.Substring(x,cvtCH),16))
下一个
返回返回
端函数
私有函数toU32(ByVal Shex作为字符串)作为列表(UInt32的)
常数cvtCH为整数=8
Dim retval作为新列表(UInt32的)
作为整数的Dim rmndr
rmndr=剪切长度模块cvtCH
如果rmndr为0,则Shex=Shex.PADLEVT(Shex.Length+cvtCH-rmndr,“0”c)
对于x为整数=0至设定长度-1步cvtCH
retval.Add(Convert.ToUInt32(Shex.Substring(x,cvtCH),16))
下一个
返回返回
端函数
私有函数toU64(ByVal Shex作为字符串)作为列表(UInt64的)
常数cvtCH为整数=16
Dim retval作为新列表(UInt64的)
作为整数的Dim rmndr
rmndr=剪切长度模块cvtCH
如果rmndr为0,则Shex=Shex.PADLEVT(Shex.Length+cvtCH-rmndr,“0”c)
对于x为整数=0至设定长度-1步cvtCH
retval.Add(Convert.ToUInt64(Shex.Substring(x,cvtCH),16))
下一个
返回返回
端函数
私有子按钮1\u单击(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理按钮1。单击
'无符号32位最大值=FFFFFFFF
'无符号64位最大值=FFFFFFFF
'有符号32位最大值=7FFFFFFF
'有符号64位最大值=7FFFFFFF
尺寸为字符串的六角头=“A14152464C203230304232323020572F54494755234352E”
尺寸hexS2为字符串=“A14152464C203230304232323020572F5449475523435”
托拜特(hexS)
toU32(hexS)
toU64(六角)
端接头

对于实际上不需要bignum类处理的十六进制值,可以使用普通转换函数,但在数字前面加上“&H”。VB将文本中的“&H”解释为“这是一个十六进制数”,就像在代码中一样

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

可以使用Visual Basic中的
Val
函数将十六进制值转换为十进制值。这是通过在字符串前面加上
“&H”
,告诉Visual Basic这是一个十六进制值,然后将其转换为一个数字来完成的

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

尝试了其他回复,这是一个对我有效的回复:

    Convert.ToInt32(yourHEXString, 16)

您想要什么号码?那是192位。。。比大多数内置类型大得多…(注意,我为你的问题添加了一条注释)我不知道数字应该是多少。Lockhead Martin刚刚开始发送这些数据,他们还没有完成文档。我们现在处于一种发现模式。我是否应该将原始(I)值相加得到数字?否;那太糟糕了。。。问题是:如何处理192位?这可能是3个长整数(Int64),6个整数(Int32),2个小数,一个大整数,等等。。。但它是大端、小端等吗。。。解码二进制需要一些关于源代码的知识,-1是正确的,VB数组声明语法给出了数组的上限,而C#给出了数组中的项数。由于数组是以零为基础的,因此上界比项数少一个。只需添加一点,.NET的结构应该能够通过允许指定数字样式的
TryParse
方法轻松地接受这样的值。不过,这是一个签名版本。因此,如果您的十六进制数实际上是无符号的,您可能需要在BigInteger周围实现一个小包装器来处理有符号元素,然后返回它。
dim n = Cint("&H" & text)
Dim Value As Integer = Val("&H" & YourHexadecimalStringHere)
Dim hex As String = "A1B2C3D4"
Dim int As Integer = Val("&H" & hex)
    Convert.ToInt32(yourHEXString, 16)