在文本框中显示字节数组而不转换为可读字符串

时间:2013-12-17 18:41:06

标签: c#

我正在尝试从textBox1中获取ASCII并在textBox2中显示二进制文本。一个简单的ASCII到二进制转换器。

        private void button1_Click(object sender, EventArgs e)
    {
        byte[] inVAR = System.Text.Encoding.ASCII.GetBytes(textBox1.Text);
        string outVAR = inVAR.ToString();
        textBox2.Text = outVAR;

    }

这当然会导致输出与输入相同,因为我将字节数组转换回可读字符串。

我的问题是如何将ASCII文本转换为二进制文件,还可以转换为字符串类型,以便我可以在文本框中显示它。

基本上我问我如何创建这个ASCII到二进制转换器,因为我的方法似乎错了。

谢谢!

解决!谢谢SLaks和OlimilOops:

textBox2.Text = string.Join(" ", inVAR.Select(b => Convert.ToString(b, 2).ToUpper()));

3 个答案:

答案 0 :(得分:3)

听起来你想要显示每个字节的数值,可能是由某种字符分隔的:

string.Join("separator", bytes)

如果要在基础中显示,可以使用LINQ:

bytes.Select(b => Convert.ToString(b, 2))

答案 1 :(得分:0)

如果您愿意使用十六进制而不是直接二进制(1和0),您可以执行以下操作

var builder = new StringBuilder();
builder.Append("0x");
foreach (var b in inVAR) {
  builder.AppendFormat("{0:x}", b);
}
textBox2.Text = builder.ToString();

答案 2 :(得分:0)

这是一种适用于许多情况的防水解决方案:

    string stringToHex(string astr)
    {
        return StringToHex(astr, System.Text.Encoding.Default);
    }
    string stringToHex(string astr, System.Text.Encoding enc)
    {
        return bytesToHex(enc.GetBytes(astr));
    }
    string bytesToHex(byte[] bytes)
    {
        if (bytes.Length == 0) return "";
        var sb = new StringBuilder();
        var n = bytes.Length - 1;
        for(int i = 0; i < n; i++) 
        {
            sb.Append(byteToHex(bytes[i]));
            sb.Append(" ");
        }
        sb.Append(byteToHex(bytes[n]));
        return sb.ToString();
    }
    string byteToHex(byte b)
    {
        string hx = Convert.ToString(b, 16).ToUpper();
        if (hx.Length < 2) hx = "0" + hx;
        return hx;
    }