如何将存储在字符串中的数字转换为二进制格式?

时间:2013-02-12 15:24:42

标签: c#

我有一个以字符串形式存储的数字,因为它是一个长数字,我想将其转换为二进制格式。

string number = "25274132531129322906392322409257377862778880"

我想得到:

string binresult;

保持价值:

 0000000000000001001000100010001000000000000000100000001011101000000000000000000011110000000000000000110100000000000000100000000000000000000000000000000000000000

3 个答案:

答案 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);