gpt4 book ai didi

c# - 将 BigInteger 二进制转换为 BigInteger 数字?

转载 作者:行者123 更新时间:2023-11-30 15:24:00 27 4
gpt4 key购买 nike

目前我正在使用 Long 整数类型。我使用以下方法从/到二进制/数字进行转换:

Convert.ToInt64(BinaryString, 2); //Convert binary string of base 2 to number
Convert.ToString(LongNumber, 2); //Convert long number to binary string of base 2

现在我使用的数字已经超过 64 位,所以开始使用 BigInteger。我似乎找不到上面代码的等效项。

我如何将超过 64 位的 BinaryString 转换为 BigInteger 数字,反之亦然?

更新:

答案中的引用包含我想要的答案,但我在从数字到二进制的转换中遇到了一些问题。

我使用了第一个引用中提供的以下代码:

    public static string ToBinaryString(this BigInteger bigint)
{
var bytes = bigint.ToByteArray();
var idx = bytes.Length - 1;

// Create a StringBuilder having appropriate capacity.
var base2 = new StringBuilder(bytes.Length * 8);

// Convert first byte to binary.
var binary = Convert.ToString(bytes[idx], 2);

// Ensure leading zero exists if value is positive.
if (binary[0] != '0' && bigint.Sign == 1)
{
base2.Append('0');
}

// Append binary string to StringBuilder.
base2.Append(binary);

// Convert remaining bytes adding leading zeros.
for (idx--; idx >= 0; idx--)
{
base2.Append(Convert.ToString(bytes[idx], 2).PadLeft(8, '0'));
}

return base2.ToString();
}

我得到的结果是错误的:

100001000100000000000100000110000100010000000000000000000000000000000000 ===>  2439583056328331886592
2439583056328331886592 ===> 0100001000100000000000100000110000100010000000000000000000000000000000000

如果将结果二进制字符串放在一起,您会注意到转换是正确的,问题是左边有一个前导零:

100001000100000000000100000110000100010000000000000000000000000000000000
0100001000100000000000100000110000100010000000000000000000000000000000000

我尝试阅读代码中提供的解释并进行更改,但没有成功。

更新 2:

我能够通过更改代码中的以下内容来解决它:

        // Ensure leading zero exists if value is positive.
if (binary[0] != '0' && bigint.Sign == 1)
{
base2.Append('0');

// Append binary string to StringBuilder.
base2.Append(binary);
}

最佳答案

不幸的是,.NET 框架中没有内置任何东西。

幸运的是,StackOverflow 社区已经解决了这两个问题:

关于c# - 将 BigInteger 二进制转换为 BigInteger 数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33611930/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com