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

时间:2017-05-10 08:17:34

标签: vb.net parsing binary biginteger

你好吗?

我编写了一个操作大二进制链(字符串变量)的程序。这种操作要求我将我的链存储在一个变量中,这样我就可以将它们用作数字。我发现唯一可以存储这么长的数字的变量类型是BigInteger(我们说的是1.0E100 +)。

我想使用类似的东西:

val = BigInteger.Parse(bin, 2)

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

有没有简单/最佳的方法来做到这一点?

非常感谢你。 :)

1 个答案:

答案 0 :(得分:0)

这会将二进制字符串转换为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"))

这未经过充分测试,但应该给你一些想法。