C#将字节数组转换为字符串

时间:2014-11-10 22:55:18

标签: c# data-conversion

我正在尝试将字节数组转换为二进制格式的字符串,但 Convert.ToString()会返回意外结果。你能告诉我我做错了什么吗? 这是代码:

class Program
{
    static void Main(string[] args)
    {
        StringBuilder str = new StringBuilder();
        byte[] x = { 0xB1, 0x53, 0x63 };
        for (int i = 0; i < 3; i++)
        {
            str.Append(Convert.ToString(x[i], 2));
        }
        Console.WriteLine(str);
        Console.ReadLine();
    }
}

输出结果为:

1011000110100111100011


我希望输出为:

1011_0001_0101_0011_0110_0011 (0xB15363)

而不是:

1011_0001_1010_0111_1000_11

3 个答案:

答案 0 :(得分:3)

尝试

str.Append(Convert.ToString(x[i], 2).PadLeft(8, '0'));

答案 1 :(得分:3)

如果你用零填充,你会得到答案

public static void Main()
{        
    StringBuilder str = new StringBuilder();
    byte[] x = { 0xB1, 0x53, 0x63 };
    for (int i = 0; i < 3; i++)
    {
        str.Append(Convert.ToString(x[i], 2).PadLeft(8, '0'));
    }
    Console.WriteLine(str);
    Console.ReadLine();
}

Fiddle

答案 2 :(得分:2)

你实际上只是没有领先的零。

01010011将只是1010011

您必须通过任何可能的方法添加前导零(Convert.ToString似乎不需要重载)。其他答案中提到PadLeft,添加new string('0', 8 - s.Length)也会有效(但requires a temporary)。