2017-05-10 3 views
0

元気?VB .NETでBigIntegerにバイナリを解析していますか?

大きなバイナリチェーン(文字列変数)を操作するプログラムを作成しました。これは、私のチェーンを変数に格納する必要があるので、数値として使うことができます。私がこのような長い数字を格納するのに十分な大きさの唯一の変数型は、BigInteger(1.0E100 +と言います)です。

val = BigInteger.Parse(bin, 2) 

しかし、必要に応じて2番目のパラメータは唯一NumberStyles.HexNumberを参照することができNumberStylesオブジェクト、次のとおりです。

私のようなものを使用したいと思います。

これを行う簡単な方法がありますか?

ありがとうございました。 :)

+0

BitArrayを使用できませんか? –

+0

どのような目的のためにですか? – user7831458

+0

大きなバイナリチェーンの場合: –

答えて

0

これは、バイナリ文字列を8ビットのチャンクでBigIntegerに変換します。バイナリ文字列は正の数を表すものとみなします。これは十分にテストされなかったが、あなたにいくつかのアイデアを与える必要があり

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")) 

をテストするための

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 

+0

ありがとうございました。魅力のように動作します。ですから、私はBigIntegerにバイナリ文字列を解析する方法がないことを理解しています。 – user7831458

関連する問題