有人可以帮我将bittarray转换成正确的字符串吗?我写了这个:
static String BitArrayToStr(BitArray ba)
        {
            byte[] strArr = new byte[ba.Length / 8];
            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
            for (int i = 0; i < ba.Length / 8; i++)
            {
                for (int index = i * 8, m = 1; index < i * 8 + 8; index++, m *= 2)
                {
                    strArr[i] += ba.Get(index) ? (byte)m : (byte)0;
                }
            }
            return encoding.GetString(strArr);
        }
但在输出上我有这个:" *Ȱ& L9 q zȲP *Ȱ& L9 q zȲP *Ȱ&Y(W " - many无法识别的符号,我该怎么办?
您可以使用此扩展方法:
public static string ToBitString(this BitArray bits)
{
    var sb = new StringBuilder();
    for (int i = 0; i < bits.Count; i++)
    {
        char c = bits[i] ? '1' : '0';
        sb.Append(c);
    }
    return sb.ToString();
}
您确定您的输入位数组来自编码为 ASCII 的字符串吗?
使用您的代码我做了以下测试
string s = "Hello World";
byte[] bytes = Encoding.ASCII.GetBytes(s);
BitArray b = new BitArray(bytes);
string s2 = BitArrayToStr(b);
s2 的值符合Hello World预期。
更新:
如注释中所述,ASCII 编码器仅将字节 32-127 处理为可打印字符,0-32 是控制字符,将显示符号,而 127 以上的所有内容都将使用 ASCII 回退来处理坏字节。
这里引用MSDN的一段话
http://msdn.microsoft.com/en-us/library/system.text.decoderfallback.aspx
如果编码无法映射输入字节序列,则解码操作可能会失败。例如,ASCIIEncoding 对象无法解码生成代码点值超出 U+0000 到 U+007F 范围的字符的字节序列。
当无法执行编码或解码转换时,.NET Framework 提供了一种称为回退的故障处理机制。您的应用程序可以使用预定义的 .NET Framework 编码器和解码器回退,也可以创建从 EncoderFallback 和 EncoderFallbackBuffer 类派生的自定义编码器回退,或从 DecoderFallback 和 DecoderFallbackBuffer 类派生的自定义解码器回退。