我正在尝试从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()));
答案 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;
}