2012-01-30 51 views
3

我想知道如何读取二进制格式的文件。如何阅读TIFF头文件c#?

例如,tiff图像文件可能具有以下二进制格式(十六进制)0000 4949 002A 0000. 我怎样才能在c#中获得这些值?

+0

'的byte [] buf中=新的字节[???] File.Open(“somefile”)。Read(buf,0,buf.Length);' – 2012-01-30 23:03:24

+0

我试过这个片段,它工作 – 1AmirJalali 2012-01-30 23:12:49

+0

仅供参考 - 这不是TIFF的正确头文件格式。它可能是49 49 2a 00(英特尔字节排序)或4d 4d 00 2a(摩托罗拉字节排序),而不是你的问题。 – plinth 2012-02-09 15:17:15

回答

3

下面是我平时阅读十六进制格式的文件,改变了头,因为你需要:

using System; 
using System.Linq; 
using System.IO; 

namespace FileToHex 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //read only 4 bytes from the file 

      const int HEADER_SIZE = 4; 

      byte[] bytesFile = new byte[HEADER_SIZE]; 

      using (FileStream fs = File.OpenRead(@"C:\temp\FileToHex\ex.tiff")) 
      { 
       fs.Read(bytesFile, 0, HEADER_SIZE); 
       fs.Close(); 
      } 

      string hex = BitConverter.ToString(bytesFile); 

      string[] header = hex.Split(new Char[] { '-' }).ToArray(); 

      Console.WriteLine(System.String.Join("", header)); 

      Console.ReadLine(); 

     } 
    } 
} 
+0

System.IO.File.ReadAllBytes()函数读取整个文件。我正在寻找一种方法来读取有限的字节数。 – 1AmirJalali 2012-01-30 22:47:20

+0

好的,编辑只读几个字节。 – 2012-01-30 23:07:16

+0

'string str = bytesFile.Aggregate(“”,(s,b)=> s + = b.ToString(“X2”));' – 2012-01-30 23:21:18

2

您可以使用有System.IO.File类的ReadAllBytes方法读取字节到一个数组:

System.IO.FileStream fs = new System.IO.FileStream(@"C:\Temp\sample.pdf", System.IO.FileMode.Open, System.IO.FileAccess.Read); 
int size = 1024; 
byte[] b = new byte[size]; 
fs.Read(b, 0, size); 
+0

如果文件大小很大(例如超过300兆字节)会怎么样。有没有办法限制读取的字节数? – 1AmirJalali 2012-01-30 22:40:50

+0

System.IO.File.ReadAllBytes()函数读取整个文件。我正在寻找一种方法来读取有限的字节数。 – 1AmirJalali 2012-01-30 22:49:23

+0

我修改了代码来读取文件的前1024个字节。 – 2012-01-31 13:54:59

0

我没有用过LibTIFF.Net,http://bitmiracle.com/libtiff但它似乎是相当完整。

使用它,而不是读取文件作为字节,然后解码头(S)可能会更容易为您。

+0

我现在使用的是LibTIFF.Net,但是我找不到任何可以在TIFF头文件中显示“字节顺序”的东西。 – 1AmirJalali 2012-01-30 22:39:19