文件解析入门学习

参考和部分表格摘自: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位,为什么多了一位。

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

时间: 2024-10-28 21:05:36

文件解析入门学习的相关文章

JavaSE入门学习45:文件传输基础之I/O流(四)

五字符流的使用 (1)编码问题 这个问题我们早就说过了,不再过多赘述. 参考:JavaSE入门学习42:文件传输基础之I/O流(一) (2)认识文本和文本文件 Java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码):而文件是byte byte byte ...的数据 :文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk等)序列化为byte的存储结果. (3)字符流(Reader Writer)---->操作的是文本文本文件 字符的

八、Android学习第七天——XML文件解析方法(转)

(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 八.Android学习第七天——XML文件解析方法 XML文件:extensible markup language 定义:用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 解析XML的方式: SAX——Simple API for XML,既是一种接口,也是一个软件包采用的是事件驱动,也就是它解析

【从零开始学习YOLOv3】1. YOLOv3的cfg文件解析与总结

前言: 与其他框架不同,Darknet构建网络架构不是通过代码直接堆叠,而是通过解析cfg文件进行生成的.cfg文件格式是有一定规则,虽然比较简单,但是有些地方需要对yolov3有一定程度的熟悉,才能正确设置. 下边以yolov3.cfg为例进行讲解. 作者:pprp 首发:GiantPandaCV公众号 1. Net层 [net] #Testing #batch=1 #subdivisions=1 #在测试的时候,设置batch=1,subdivisions=1 #Training batch

OC-Json文件解析-Json网址学习

1 //json 2 //javascript 语法的子集 3 //key : value 类似于dictionary对象 4 //json是由数组和对象构成的 5 6 //1.json文件的最外层结构为字典或是数组,大多数是字典 7 //2.json数据可以是基本数据类型,字符串对象,数组对象([]包含),字典对象,逻辑对象({}包含),null, 8 9 int main(int argc, const char * argv[]) { 10 @autoreleasepool { 11 12

用python做网页抓取与解析入门笔记[zz]

(from http://chentingpc.me/article/?id=961) 事情的起因是,我做survey的时候搜到了这两本书:Computational Social Network Analysis和Computational Social Network,感觉都蛮不错的,想下载下来看看,但是点开网页发现这个只能分章节下载,晕,我可没时间一章一章下载,想起了迅雷的下载全部链接,试试看,果真可以把他们一网打尽,但是,sadly,迅雷下载的时候,文件名没办法跟章节名对应起来,晕,我可

PHP入门学习:现在写 PHP,你应该知道这些

本文来源:http://www.zretc.com/technologyDetail/443.html 如果你正在进行PHP入门学习,那么下面这些关于PHP的入门知识你应该知道哦! 首先你应该是在用 PHP 5.3 以上的版本,如果 PHP 版本在这之下,是时候该升级了.如果有条件,最好使用最新的版本. 1.PSR 很多人以为 PSR 只是做一些规范代码风格等无关痛痒的事情,但其实远不止此. PSR 的一系列标准文档由 php-fig (PHP Framework Interop Group)起

ElasticStack的入门学习

Beats,Logstash负责数据收集与处理.相当于ETL(Extract Transform Load).Elasticsearch负责数据存储.查询.分析.Kibana负责数据探索与可视化分析. 1.Elasticsearch 6.x版本的安装,我这里使用Elasticsearch 6.7.0版本的. 备注:之前安装过5.4.3版本的,https://www.cnblogs.com/biehongli/p/11643482.html 2.将下载好的安装包上传到服务器上面,或者你在线下载也可

Retrofit 入门学习

Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); } 这些注解都有一个参数 value,用来配置其路径,比如示例中的 users/{user}/repos, 我们还注意到在构造 Retrofit

003-Tuple、Array、Map与文件操作入门实战

003-Tuple.Array.Map与文件操作入门实战 Tuple 各个元素可以类型不同 注意索引的方式 下标从1开始 灵活 Array 注意for循环的until用法 数组的索引方式 上面的for是下标索引(繁琐用的不多) 下面的for是增强for循环的元素遍历索引(推荐) Map 注意左边是Key,右边是Value _(下划线也可以作为占位符,形成结构,但无名称不可以访问) 文件操作 进行了Source包的引入 .fromFile() getLines 使用了Iterator 欢迎广大爱好