我有一个以字符串形式存储的数字,因为它是一个长数字,我想将其转换为二进制格式。
string number = "25274132531129322906392322409257377862778880"
我想得到:
string binresult;
保持价值:
0000000000000001001000100010001000000000000000100000001011101000000000000000000011110000000000000000110100000000000000100000000000000000000000000000000000000000
答案 0 :(得分:1)
你实际上可以使用DanByströ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')));
一起运行所有这些让我:
01110001010101010100100000000000110010010010001010100000000000000101110111000000000001010001010000000000110001111111111111111111111111111111111011100010
您的电话号码。我不知道你打算如何验证它,但如果Dan的十六进制翻译是正确的,那么二进制字符串肯定是正确的。
答案 1 :(得分:0)
你可以试试这个:
string number = "25274132531129322906392322409257377862778880";
char[] strArr = number.ToCharArray();
StringBuilder sb = new StringBuilder();
foreach (char chr in strArr)
{
sb.Append(Convert.ToString((int)Char.GetNumericValue(chr), 2));
}
string binresult = sb.ToString();
答案 2 :(得分:0)
System.Convert可以帮助你完成这样的点点滴滴。见下文。
string decString = "12345";
int integer = Convert.ToInt32(decString);
string binString = Convert.ToString(integer, 2);