码迷,mamicode.com
首页 > 其他好文 > 详细

文件解析入门学习

时间:2015-05-17 18:15:02      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

参考和部分表格摘自:http://www.cnblogs.com/kingmoon/archive/2011/04/18/2020097.html

 

在这方面我是新手,一些入门级别的学习,欢迎大牛给出教程或者学习资料。

万事开头难,先从c#读字节数组开始吧

 

最简单的文本文件字节读取:

static void Main(string[] args)
{
    File.WriteAllText("D:/Test.txt", "aA");
    var bytes = File.ReadAllBytes("D:/Test.txt");
    Console.WriteLine(bytes);
    Console.Read();
}

字节这个概念并不是一堆01,也不需要取反码补码之类的。

这段代码打印出的值是97,65

正好对应ASCII码,但并不是这么简单,应该txt还有pe文件头的结构,估计字节码是在上一层的东西

 

加深理解,加一个UTF-8编码:

File.WriteAllText("D:/Test.txt", "aA", Encoding.UTF8);

打印:239,187,191,97,65

多了一个文件头的信息,指定是什么编码?是BOM?(猜的)。

 

再试试Unicode:

File.WriteAllText("D:/Test.txt", "aA", Encoding.Unicode);

打印:255,254,97,0,65,0

 

 

百度查了点资料,从bmp格式的解析学起

字 段 名

大小(单位:字节)

描 述

bfType

2

位图类别,根据不同的操作

系统而不同,在Windows

中,此字段的值总为‘BM’

bfSize

4

BMP图像文件的大小

bfReserved1

2

总为0

bfReserved2

2

总为0

bfOffBits

4

BMP图像数据的地址

 

 

前面2个字节的类型信息不太清楚,先看下4个字节的大小信息能否对应上,我创建了一个1x5像素的图片,图片大小是82字节

技术分享

 

可以看见,后面4个字节里有82这个数,那么如果数据量更大,是如何进位的?byte格式的上限是255,先尝试一下大于255的大小

技术分享

 

打印结果有点诡异,222和1

var bytes = File.ReadAllBytes("D:/a.bmp");
var value = BitConverter.ToInt32(new byte[] { 218, 3, 0, 0 }, 0);
Console.WriteLine(value);
Console.WriteLine(bytes);
Console.Read();

然后研究了下,用BitConverter把值打出来,和windows里显示的容量值吻合了

打印结果:986

 

具体原理就是进位,好像还有高位在前低位在后的规则,没仔细研究

技术分享

 

 

bmp位图文件头总共占用2+4+2+2+4=14个字节

然后再往下就是位图信息头

字 段 名

大小

(单位:

字节)

描 述

biSize

4

本结构的大小,根据不同的操作系统而不同,在Windows中,此字段的值总为28h字节=40字节

biWidth

4

BMP图像的宽度,单位像素

biHeight

4

总为0

biPlanes

2

总为0

biBitCount

2

BMP图像的色深,即一个像素用多少位表示,常见有1、4、8、16、24和32,分别对应单色、16色、256色、16位高彩色、24位真彩色和32位增强型真彩色

biCompression

4

压缩方式,0表示不压缩,1表示RLE8压缩,2表示RLE4压缩,3表示每个像素值由指定的掩码决定

biSizeImage

4

BMP图像数据大小,必须是4的倍数,图像数据大小不是4的倍数时用0填充补足

biXPelsPerMeter

4

水平分辨率,单位像素/m

biYPelsPerMeter

4

垂直分辨率,单位像素/m

biClrUsed

4

BMP图像使用的颜色,0表示使用全部颜色,对于256色位图来说,此值为100h=256

biClrImportant

4

重要的颜色数,此值为0时所有颜色都重要,对于使用调色板的BMP图像来说,当显卡不能够显示所有颜色时,此值将辅助驱动程序显示颜色

 

bisize不太好理解,比较一下biwidth试试

也就是说跳过前14+4个字节:

 技术分享

 

改了一次宽度,验证结果是否正确。不过有一点很奇怪,第18个字节应该是索引的17位,为什么多了一位。

暂时写这么多,晚上还有事。对字节的读取加深了理解

 

文件解析入门学习

标签:

原文地址:http://www.cnblogs.com/hont/p/4510048.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!