我寫了一個處理大型二進制鏈(字符串變量)的程序。這說的操作要求我將我的鏈存儲在一個變量中,以便我可以將它們用作數字。我發現存儲這麼長的數字的唯一變量類型是BigInteger(我們正在談論1.0E100 +)。
我想用這樣的:
val = BigInteger.Parse(bin, 2)
,但需要第二個參數是一個的NumberStyles對象,它只能指NumberStyles.HexNumber。
是否有一個簡單/最佳的方式來做到這一點?
非常感謝。 :)
我寫了一個處理大型二進制鏈(字符串變量)的程序。這說的操作要求我將我的鏈存儲在一個變量中,以便我可以將它們用作數字。我發現存儲這麼長的數字的唯一變量類型是BigInteger(我們正在談論1.0E100 +)。
我想用這樣的:
val = BigInteger.Parse(bin, 2)
,但需要第二個參數是一個的NumberStyles對象,它只能指NumberStyles.HexNumber。
是否有一個簡單/最佳的方式來做到這一點?
非常感謝。 :)
這將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"))
這是沒有得到很好的測試,但應該給你一些想法。
非常感謝。奇蹟般有效。所以我明白,沒有辦法將二進制字符串解析爲BigInteger。 – user7831458
難道你不能使用它的BitArray? –
爲了什麼目的? – user7831458
適合你的大型二元鏈:) –