十六进制到数字代码适用于小数字但大数字产生错误

时间:2016-06-22 10:46:16

标签: .net vb.net hex integer-overflow

以下代码会将hex string转换为numeric值,并且可以使用1f这样的小十六进制数运行。但是,它不适用于"000000000000000117c80378b8da0e33559b5997f2ad55e2f7d18ec1975b9717"之类的大数字,因为int32不能有那么大/小的数字。但应该有另一种绕过这些限制的方法吗?有人可以在这里说清楚,或者欢迎任何搜索关键词搜索谷歌等,因为我找不到任何方法来转换大的十六进制数字。

Public Class Form1

    Dim data As String = "000000000000000117c80378b8da0e33559b5997f2ad55e2f7d18ec1975b9717"
    Dim result1 As String = Nothing


    Public Function hexToNumeric(ByVal inputHexstring As String)
        Dim val As Integer

        val = Convert.ToInt32(inputHexstring, 16)
        Return val
    End Function

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        result1 = hexToNumeric(data)
    End Sub
End Class

2 个答案:

答案 0 :(得分:1)

您应该查看BigInteger结构,请参阅https://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx

您可以从字节数组转换为BigInteger,但要注意以下事项:" BigInteger结构要求字节数组中的各个字节以小端顺序出现(即,较低的 - 值的字节字节在高位字节之前。)"

答案 1 :(得分:0)

您可以使用BigInteger和Parse复制样本中的功能。

Imports System.Numerics

Public Shared Function hexToNumeric(ByVal inputHexstring As String) As BigInteger
    Dim val As BigInteger

    val = BigInteger.Parse(inputHexstring, Globalization.NumberStyles.AllowHexSpecifier)

    Return val
End Function

Public Shared Sub Main()
    Dim data As String = "000000000000000117c80378b8da0e33559b5997f2ad55e2f7d18ec1975b9717"

    Console.WriteLine(hexToNumeric(data))
    Console.ReadLine()
End Sub

结果是

6860217587554922525607992740653361396256930700588249487127