在 VB .NET 中将二进制文件解析为 BigInteger?

Parsing binary to BigInteger in VB .NET?

你好吗?

我写了一个程序来处理大二进制链(字符串变量)。这表示操作要求我将我的链存储在一个变量中,以便我可以将它们用作数字。我发现唯一大到足以存储如此长的数字的变量类型是 BigInteger(我们说的是 1.0E100+)。

我想使用类似的东西:

val = BigInteger.Parse(bin, 2)

但是需要的第二个参数是一个NumberStyles对象,只能引用一个NumberStyles.HexNumber.

有simple/optimal方法吗?

非常感谢。 :)

这会将二进制字符串转换为 8 位块中的 BigInteger。它假定二进制字符串代表一个正数。

Private Function BinToBI(ByRef binstr As String) As BigInteger
    Dim t As New List(Of Byte)
    Dim s As String
    Dim idx As Integer = binstr.Length
    Do While idx > 0
        'get 8 bits
        If idx >= 8 Then
            s = binstr.Substring(idx - 8, 8)
        Else
            s = binstr.Substring(0, idx).PadLeft(8, "0"c)
        End If
        'convert to byte and add to list
        Dim b As Byte = Convert.ToByte(s, 2)
        t.Add(b)
        idx -= 8
    Loop
    'force to positive
    If t(t.Count - 1) >= 128 Then
        t.Add(0)
    End If
    Dim rv As New BigInteger(t.ToArray)
    Return rv
End Function

用于测试

    Dim d As Double = 1.0E+101
    Debug.WriteLine(d.ToString("n2"))
    Dim bi As BigInteger
    ' Dim bin As String = "1111111111111111111111111111111" 'Integer.MaxValue
    ' Dim bin As String = "111111111111111111111111111111111111111111111111111111111111111" 'Long.MaxValue
    Dim bin As String = "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110"
    bi = BinToBI(bin)
    Debug.WriteLine(bi.ToString("n2"))

这没有经过很好的测试,但应该会给你一些想法。