将二进制字符串转换为int C#

时间:2020-04-13 14:21:24

标签: c#

我有此代码:

string result = "";
        foreach(char item in texte)
        {
            result += Convert.ToString(item, 2).PadLeft(8, '0');
        }

所以我有一个名为result wich的字符串,它是二进制形式的“ bonjour”之类的单词的转换。 对于texte =“ bonjour”,我将字符串结果= 01100010011011111110110111001101010011011110111010101110010作为整数类型。

当我这样做

Console.writeLine(result[0])

我得到0,正常,是我期望的 但是如果我这样做

Console.WriteLine((int)result[0])

Console.WriteLine(Convert.ToInt32(result[0]))

我得到48! 我不需要48,我希望整数类型为0或1。

能帮我吗?

3 个答案:

答案 0 :(得分:0)

string a = "23jlfdsa890123kl21";
byte[] data = System.Text.Encoding.Default.GetBytes(a);
StringBuilder result = new StringBuilder(data.Length * 8);
foreach (byte b in data)
{
    result.Append(Convert.ToString(b, 2).PadLeft(8, '0'));
}

您可以尝试此代码。

答案 1 :(得分:0)

您可以从中减去48!

Console.WriteLine(result[0] - 48);

因为字符数字0-9被编码为48到57。

如果要按索引访问每个位,我建议改用BitArray

var bytes = Encoding.ASCII.GetBytes("someString");
var bitArray = new BitArray(bytes);
// now you can access the first bit like so:
bitArray.Get(0) // this returns a bool
bitArray.Get(0) ? 1 : 0 // this gives you a 1 or 0

答案 2 :(得分:0)

只要这样做 Console.WriteLine(Convert.ToInt32(Convert.ToString(result[0])));

您期望它的行为与Convert.ToInt32(string input)相同,但实际上您正在调用Convert.ToInt32(char input),如果您检查文档,他们会明确指出它将返回unicode值(在这种情况下,与ASCII值相同。

http://msdn.microsoft.com/en-us/library/ww9t2871(v=vs.110).aspx