国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

文件解析入門學(xué)習(xí)

2019-11-17 02:23:05
字體:
供稿:網(wǎng)友

文件解析入門學(xué)習(xí)

參考和部分表格摘自:http://m.survivalescaperooms.com/kingmoon/archive/2011/04/18/2020097.html

在這方面我是新手,一些入門級別的學(xué)習(xí),歡迎大牛給出教程或者學(xué)習(xí)資料。

萬事開頭難,先從c#讀字節(jié)數(shù)組開始吧

最簡單的文本文件字節(jié)讀取:

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

字節(jié)這個(gè)概念并不是一堆01,也不需要取反碼補(bǔ)碼之類的。

這段代碼打印出的值是97,65

正好對應(yīng)ASCII碼,但并不是這么簡單,應(yīng)該txt還有pe文件頭的結(jié)構(gòu),估計(jì)字節(jié)碼是在上一層的東西

加深理解,加一個(gè)UTF-8編碼:

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

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

多了一個(gè)文件頭的信息,指定是什么編碼?是BOM?(猜的)。

再試試Unicode:

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

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

百度查了點(diǎn)資料,從bmp格式的解析學(xué)起

字 段 名

大小(單位:字節(jié))

描 述

bfType

2

位圖類別,根據(jù)不同的操作

系統(tǒng)而不同,在Windows

中,此字段的值總為‘BM’

bfSize

4

BMP圖像文件的大小

bfReserved1

2

總為0

bfReserved2

2

總為0

bfOffBits

4

BMP圖像數(shù)據(jù)的地址

前面2個(gè)字節(jié)的類型信息不太清楚,先看下4個(gè)字節(jié)的大小信息能否對應(yīng)上,我創(chuàng)建了一個(gè)1x5像素的圖片,圖片大小是82字節(jié)

可以看見,后面4個(gè)字節(jié)里有82這個(gè)數(shù),那么如果數(shù)據(jù)量更大,是如何進(jìn)位的?byte格式的上限是255,先嘗試一下大于255的大小

打印結(jié)果有點(diǎn)詭異,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里顯示的容量值吻合了

打印結(jié)果:986

具體原理就是進(jìn)位,好像還有高位在前低位在后的規(guī)則,沒仔細(xì)研究

bmp位圖文件頭總共占用2+4+2+2+4=14個(gè)字節(jié)

然后再往下就是位圖信息頭

字 段 名

大小

(單位:

字節(jié))

描 述

biSize

4

本結(jié)構(gòu)的大小,根據(jù)不同的操作系統(tǒng)而不同,在Windows中,此字段的值總為28h字節(jié)=40字節(jié)

biWidth

4

BMP圖像的寬度,單位像素

biHeight

4

總為0

biplanes

2

總為0

biBitCount

2

BMP圖像的色深,即一個(gè)像素用多少位表示,常見有1、4、8、16、24和32,分別對應(yīng)單色、16色、256色、16位高彩色、24位真彩色和32位增強(qiáng)型真彩色

biComPRession

4

壓縮方式,0表示不壓縮,1表示RLE8壓縮,2表示RLE4壓縮,3表示每個(gè)像素值由指定的掩碼決定

biSizeImage

4

BMP圖像數(shù)據(jù)大小,必須是4的倍數(shù),圖像數(shù)據(jù)大小不是4的倍數(shù)時(shí)用0填充補(bǔ)足

biXPelsPerMeter

4

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

biYPelsPerMeter

4

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

biClrUsed

4

BMP圖像使用的顏色,0表示使用全部顏色,對于256色位圖來說,此值為100h=256

biClrImportant

4

重要的顏色數(shù),此值為0時(shí)所有顏色都重要,對于使用調(diào)色板的BMP圖像來說,當(dāng)顯卡不能夠顯示所有顏色時(shí),此值將輔助驅(qū)動(dòng)程序顯示顏色

bisize不太好理解,比較一下biwidth試試

也就是說跳過前14+4個(gè)字節(jié):

改了一次寬度,驗(yàn)證結(jié)果是否正確。不過有一點(diǎn)很奇怪,第18個(gè)字節(jié)應(yīng)該是索引的17位,為什么多了一位。

暫時(shí)寫這么多,晚上還有事。對字節(jié)的讀取加深了理解


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 辽阳县| 禄丰县| 安溪县| 松溪县| 祥云县| 新田县| 沾化县| 阿城市| 依安县| 双鸭山市| 女性| 云和县| 衡南县| 沈阳市| 府谷县| 满洲里市| 方山县| 台州市| 临颍县| 丰都县| 拜城县| 米泉市| 巴马| 永顺县| 历史| 涟源市| 镇赉县| 荔浦县| 襄汾县| 筠连县| 和林格尔县| 米易县| 高陵县| 翁牛特旗| 蓬溪县| 潼关县| 沙坪坝区| 红安县| 双鸭山市| 河北省| 广州市|