我正在尝试将字节数组转换为二进制格式的字符串,但 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
答案 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();
}
答案 2 :(得分:2)
你实际上只是没有领先的零。
01010011
将只是1010011
。
您必须通过任何可能的方法添加前导零(Convert.ToString
似乎不需要重载)。其他答案中提到PadLeft
,添加new string('0', 8 - s.Length)
也会有效(但requires a temporary)。