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

本文关键字:转换 字符串 数组 文本 显示 字节数 字节 | 更新日期: 2024-10-19 07:35:27

我正试图从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()));

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

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

string.Join("separator", bytes)

如果你想在基地显示,你可以使用LINQ:

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

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

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

这里有一个适用于多种情况的防水解决方案:

    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;
    }