長さ65以上の2進数を10進数に変換するには、次のようなメソッドを作成する必要があります。
public BigInteger FromBinaryString(string binary)
{
if (binary == null)
throw new ArgumentNullException();
if (!binary.All(c => c == '0' || c == '1'))
throw new InvalidOperationException();
BigInteger result = 0;
foreach (var c in binary)
{
result <<= 1;
result += (c - '0');
}
return result;
}
構造を使用System.Numerics.BigInteger
して大きな数を保持します。次に、それを明示的に(またはバイト配列に)変換してdecimal
、データベースに格納できます。
var bigInteger = FromBinaryString("100000000000000000000000000000000000000000000000000000000000000000");
// to decimal
var dec = (decimal)bigInteger;
// to byte array
var data = bigInteger.ToByteArray();
編集:NET 3.5を使用している場合は、decimal
代わりに使用してくださいBigInteger
(左シフト演算子を小数<<
の乗算演算子に置き換えてください):*
public decimal FromBinaryString(string binary)
{
if (binary == null)
throw new ArgumentNullException();
if (!binary.All(c => c == '0' || c == '1'))
throw new InvalidOperationException();
decimal result = 0;
foreach (var c in binary)
{
result *= 2;
result += (c - '0');
}
return result;
}