二进制转换时缺少前导0

时间:2013-12-17 20:47:02

标签: c#

我最近得到了将ASCII字符串转换为二进制的答案....

byte[] inVAR = System.Text.Encoding.ASCII.GetBytes(textBox1.Text);

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

这只是从Box1获取文本并将二进制等效项放在Box2中。

我的问题是缺少二进制文件的前导0。

例如:“A”给出“1000001”而不是“01000001”

我想我可以手动追加每个字符的前导零,但我担心这可能会破坏某些应该以“1”开头或已经是8位的字符。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

您可以使用PadLeft

string.Join("", inVAR.Select(b => Convert.ToString(b, 2).PadLeft(8, '0')));

答案 1 :(得分:4)

您可以使用PadLeft附加正确数量的字符。如果你已经有8个字符,则不会执行任何操作。如果你有更少,它将添加0使其成为8个字符。

textBox2.Text = string.Join("", inVAR.Select(b => Convert.ToString(b, 2)
    .PadLeft(8, '0')));

答案 2 :(得分:3)

您可以为数组中的每个字节添加前导零:

textBox2.Text = string.Join("", inVAR.Select(b =>
    Convert.ToString(b, 2).PadLeft(8, '0')));

如果在整个结果字符串中添加零,则如果其中一个字节的结果少于8个字符,则可能是错误的。