您实际上可以使用 Dan Byström 对How to convert a gi-normous integer (in string format) to hex format 的回答?(C#),就像评论中建议的 Michael Edenfeld 一样。它会让你从你的大数字字符串变成十六进制。为了您的方便,我将重新发布他的代码:
var s = "25274132531129322906392322409257377862778880";
var result = new List<byte>();
result.Add(0);
foreach (char c in s)
{
int val = (int)(c - '0');
for (int i = 0 ; i < result.Count ; i++)
{
int digit = result[i] * 10 + val;
result[i] = (byte)(digit & 0x0F);
val = digit >> 4;
}
if (val != 0)
result.Add((byte)val);
}
var hex = "";
foreach (byte b in result)
hex = "0123456789ABCDEF"[b] + hex;
我不会自称理解他是如何想出这个的,但我已经用一些我知道十六进制值的数字对其进行了测试,它似乎有效。我很想听听他的解释。
现在,您想要二进制的答案,幸运的是,从十六进制转换为二进制是生活中更容易的事情之一。每个十六进制值都直接转换为其 4 位二进制对应值(0x7 = 0111、0xA = 1010 等)。您可以编写一个循环来逐个字符地执行此转换,但是 Guffa 对C# how convert large HEX string to binary的回答提供了这个方便的花花公子 Linq 语句来执行相同的操作:
string binaryString = string.Join(string.Empty,
hex.Select(c => Convert.ToString(Convert.ToInt32(
c.ToString(), 16), 2).PadLeft(4, '0')));
一起运行所有这些给我:
011100010101010100000000000000000000000011001001001001101011111111111111111111111111111111111111110101000100010000000000000000000000111111111111111111111111111111111111111111111919太验值
为你的号码。我不知道你打算如何验证它,但如果 Dan 的十六进制翻译是正确的,那么那个二进制字符串肯定是正确的。