2009-10-29 70 views
3

我正在加载文件到一个字节[]。据我了解,byte []应该包含字节的特定元素(8位)。当我打印每个字节时,它们都不是8位(即它们不具有8的长度)。 我的代码:C#问题与字节[]

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 

我觉得我的理解是错在这里,你能请让我知道(或提供我一些教程链接),我很想念这个。

+4

'字节[]数据= File.ReadAllBytes(@ “FilePath.jpg”);' – 2009-10-29 15:53:57

回答

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')); 

    } 
+0

谢谢,这是我失踪的部分。 (我对C#只有一种模糊的认识。) – 2009-10-29 15:47:30

+0

而不是PadLeft(8,Convert.ToChar(“0”)),只是做PadLeft(8,'0')。没有意义每次都将字符串转换为字符。 – Kevin 2009-10-29 15:47:47

+0

男人,你们都打我回答,因为我花时间编写和测试“修复”代码。“然而,+对所有回答正确的人。 – David 2009-10-29 15:48:34

18

引导0不打印。

+0

令人惊讶的是,你从这个简单的回应中得到的所有“爱”......(我没有嫉妒,你聪明地战胜了我们,加上我今天是200),但是当我们为这些简单的问题得到这么多代表? – mjv 2009-10-29 15:47:54

+0

@mvj - 别开玩笑!但我很嫉妒。但足够大来处理它。 (坏笑)。 – David 2009-10-29 15:52:59

+0

@mjv我最高的代表答案通常是最容易回答的。涉及专业知识,大量参考文献等的问题很少会得到超过一些票,因为很少有人知道答案是否正确。 mmyers可能也是如此,我相信他很乐意接受代表,即使它很简单。 – 2009-10-29 15:53:20

3

它只是前导零不包括被...

2

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

4

它们都有8位,但不显示非显着零(左边的零)。