字节[]的C#问题

时间:2009-10-29 15:38:46

标签: c#

我正在将文件加载到byte []中。根据我的理解,byte []应包含特定的字节元素(8位)。当我打印每个字节时,它们都不是8位(即它们的长度不是8)。 我的代码:

FileStream stream = File.OpenRead(@"C:\Image\Img.jpg");
byte[] fileByte = new byte[stream.Length];
stream.Read(fileByte, 0, fileByte.Length);

for (int i = 0; i <= fileByte.Length - 1; i++)
{
  Console.WriteLine(Convert.ToString(fileByte[i], 2));
}

输出:

10001110
11101011
10001100
1000111
10011010
10010011
1001010
11000000
1001001
100100

我认为我的理解是错误的,你能告诉我(或提供一些教程链接)我错过了这个。

5 个答案:

答案 0 :(得分:18)

领先的0不会被打印出来。

答案 1 :(得分:13)

将数字转换为字符串时,会丢失任何前导零。 (请注意,所有条目都以“1”开头。)您可以使用PadLeft将它们重新放入。

   FileStream stream = File.OpenRead(@"C:\Image\Img.jpg"); 
   byte[] fileByte = new byte[stream.Length]; 
   stream.Read(fileByte, 0, fileByte.Length); 

   for (int i = 0; i <= fileByte.Length - 1; i++) 
   { 
      Console.WriteLine(Convert.ToString(fileByte[i], 2).PadLeft(8,'0')); 

   }

答案 2 :(得分:4)

它们都有8位,但不打印非重要零(左边的零)。

答案 3 :(得分:3)

简单地说,不包括前导零......

答案 4 :(得分:2)

字节是否没有前导零?你有点选择了一个不好的例子,因为我们不知道你显示的十进制值(好吧,也许知道.jpg文件的头结构的人知道)。我愿意打赌前导零不会显示在二进制等价物中。