苹果怎么才能最快苹果手机连接蓝牙耳机机

【图文】第十章数据压缩算法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
第十章数据压缩算法
上传于||文档简介
&&计算机算法设计与分析
王晓东编著 湘潭大学教学版课件
大小:1.27MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢如何看懂16进制表
该用户从未签到
硬盘结构简介:
很久以前, 硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘. 也就是硬盘盘片的每一条磁道都具有相同的扇区数. 由此人们定义硬盘参数为(CHS)参数,即磁头数(Heads),柱面数(Cylinders),扇区数(Sectors),以及相应的寻址方式。
磁头数表示硬盘总共有几个磁头,也就是有几面盘片,最大为255 (用8个二进制位存储);
柱面数表示硬盘每一面盘片上有几条磁道, 最大为1023(用10个二进制位存储);
扇区数(Sectors) 表示每一条磁道上有几个扇区, 最大为63 (用6个二进制位存储);
每个扇区一般是 512个字节, 理论上讲这不是必须的, 但好象没有取别的值的;
所以磁盘最大容量为:255 * 1023 * 63 * 512 / 1048576 = 8024 GB ( 1M = 1048576 Bytes )
或硬盘厂商常用的单位:255 * 1023 * 63 * 512 / 1000000 = 8414 GB ( 1M = 1000000 Bytes )
在 CHS 寻址方式中, 磁头, 柱面, 扇区的取值范围分别为 0 到 Heads – 1,0 到 Cylinders - 1,1 到 Sectors (注意是从 1 开始)
在老式硬盘中,由于每个磁道的扇区数相等,所以外道的记录密度要远低于内道,因此会浪费很多磁盘空间 (与软盘一样)。为了解决这一问题,进一步提高硬盘容量,人们改用等密度结构生产硬盘。也就是说,外圈磁道的扇区比内圈磁道多。采用这种结构后,硬盘不再具有实际的3D参数,寻址方式也改为线性寻址,即以扇区为单位进行寻址。为了与使用3D寻址的老软件兼容在硬盘控制器内部安装了一个地址翻译器。由它负责将老式3D参数翻译成新的线性参数。这也是为什么现在硬盘的3D参数可以有多种选择的原因 (不同的工作模式, 对应不同的3D参数, 如 LBA, LARGE, NORMAL)。
磁盘分区简介:
BOOTSECTOR简介
Boot Sector 也就是硬盘的第一个扇区, 它由 MBR (Master Boot Record), DPT (Disk Partition Table) 和 Boot Record ID 三部分组成。MBR 又称作主引导记录占用 Boot Sector 的前 446 个字节 ( 0 to 0x1BD ), 存放系统主引导程序 (它负责从活动分区中装载并运行系统引导程序).
DPT 即主分区表占用 64 个字节 (0x1BE to 0x1FD), 记录了磁盘的基本分区信息,主分区表分为四个分区项,,每项 16 字节,分别记录了每个主分区的信息(因此最多可以有四个主分区).Boot Record ID 即引导区标记占用两个字节 (0x1FE and 0x1FF), 对于合法引导区,它等于 0xAA55,这是判别引导区是否合法的标志。
BOOTSECTOR的具体结构如下图所示:
Master Boot Record主引导记录(446字节)
分区信息1(16字节)
分区信息2(16字节)
分区信息3(16字节)
分区信息4(16字节)
BOOTSECTOR结构图
分区表结构简介
分区表由四个分区项构成, 每一项长度为16个字节,分区表结构如下图所示:
分区状态,0=未激活,0x80=激活(注意此项) 0
分区起始磁头号 1
分区起始扇区和柱面号,底字节的低6位为扇区号,高2位为柱面号的第9,10位,高字节为柱面号的低8位 2
分区类型,如0x0B=FAT32,0x83=Linux等,0表示此项未用 4
分区结束磁头号 5
分区结束扇区和柱面号,低字节的低6位为扇区号,高2位为柱面号的第9,10位,高字节为柱面号的低8位 6
在线性寻址方式下的分区相对扇区地址(对于基本分区即为绝对地址) 8
分区大小(总扇区数)
注意:在DOS/Windows系统下,基本分区必须以柱面为单位划分(Sectors*Heads个扇区),如对于CHS为764/255/63的硬盘,分区的最小尺寸为255*63*512/.844MB
分区表结构图
扩展分区简介
由于主分区表中只能分四个分区, 无法满足需求, 因此设计了一种扩展分区格式. 基本上说,扩展分区的信息是以链表形式存放的, 但也有一些特别的地方.
首先, 主分区表中要有一个基本扩展分区项, 所有扩展分区都隶属于它,也就是说其他所有扩展分区的空间都必须包括在这个基本扩展分区中. 对于DOS / Windows 来说, 扩展分区的类型为 0x05(EXTENDX). 除基本扩展分区以外的其他所有扩展分区则以链表的形式级联存放,后一个扩展分区的数据项记录在前一个扩展分区的分区表中, 但两个扩展分区 的空间并不重叠.扩展分区类似于一个完整的硬盘, 必须进一步分区才能使用. 但每个扩展分区中只能存在一个其他分区. 此分区在 DOS/Windows 环境中即为逻辑盘. 因此每一个扩展分区的分区表 (同样存储在扩展分区的第一个扇区中)中最多只能有两个分区数据项(包括下一个扩展分区的数据项).
扩展分区的分区表存放在该分区的第一个扇区中它的结构与硬盘的BOOTSETOR基本相同,只是没有主引导纪录,即该扇区的0-0X1BD的数据是无效的,另外它的分区表只有前面两项是有效的。他的最后两个字节也是合法性检测标志即55AA
下面是扩展分区的结构示意图
扩展分区的结构示意图
硬盘分区类型
0 未使用分区项
1 DOS12一种Fat表为12位的分区主要用于早期小硬盘和部分软盘
2 xenix一种linux分区
4 D0S16早期硬盘分区方法,分区表项为16位,最大支持32M分区大小
5 EXTEND扩展分区的一种该分区的 起始扇区为前面的第一个EXTENDX分区起始扇区+该分区的相对偏移
6 BIGDOS即FAT16分区 分区表为16位,每簇最大为32K,最大分区为2G
7 NTFS分区
B FAT32分区 分区表为32位
C FAT32X分区与FAT32基本相同
E BIGDOSX即FAT16分区扩展 分区表为16位,每簇最大可以超过32K
F EXTENDX扩展分区的一种,起始扇区为该分区的相对偏移或者 前面的前面的第一个EXTENDX分区起始扇区+该分区的相对偏移;
如何找到一个逻辑分区
前面介绍了硬盘的分区结构,下面主要讲解如何找到一个硬盘的逻辑分区首先读取硬盘BOOTSECTOR,读取该硬盘的分区表例如下面是一个15G硬盘的BOOTSECTOR
一个硬盘的BOOTSECTORS数据
其中红色部分是主引导纪录(MBR)蓝色和浅绿色是分区表数据一共是4个分区项和显然后两个分区表项是未用的。最后两个字节是合法性标志。
对于第一个分区表项可以知道该分区是一个活动分区,分区类型是0X0C (FAT16)分区分区相对扇区起始地址是0x3f(63) 分区大小是0x32F8E(208782个扇区大小大概未100M由于这是柱分区该分区的起始扇区号就为0x3f;
对于第二个分区表项可以知道该分区的分区类型是0x0F(EXTENDX)分区,起始扇区地址是0X32FCD(208845)分区大小是0X1BC6CD5()个扇区。
读取扇区0X32FCD取出扩展分区得的分区表项
00 01 01 0D 07 FE BF 0A 3F 00 00 00 3F 04 7D 00
00 00 81 0B 05 FE FF 09 7E 04 7D 00 3F 82 3E 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
取出第一个分区表项知道该分区是类型是7(NTFS分区)分区大小是0X7D043F分区相对扇区号为0x3f可以算出分区的起始扇区是0X32FCD+0X3F=0X3300C
取出第二个分区表项知道该分区是类型是5(EXTEND分区)分区大小是0X3E823F分区相对扇区号为0X7D047E可以算出分区的起始扇区是0X32FCD+0X7D047E=0X80344B
读取扇区0X80344B取出扩展分区得的分区表项
00 01 81 0b 0b fe ff 08 3f 00 00 00 00 82 3e 00
00 00 c1 0a 05 fe ff ff bd 86 bb 00 57 a7 00 01
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
取出第一个分区表项知道该分区是类型是0b(Fat32分区)分区大小是0X3e8200分区相对扇区号为0x3f可以算出分区的起始扇区是0X32FCD+0x7d047e +0X3F=0X80348a
取出第二个分区表项知道该分区是类型是5(EXTEND分区)分区大小是0X100a757分区相对扇区号为0Xbb86bd可以算出分区的起始扇区是0X32FCD+0Xbb86bd=0Xbbe68a
读取扇区0Xbbe68a取出扩展分区得的分区表项
00 01 c1 0a 07 fe ff ff 3f 00 00 00 18 a7 00 01
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
取出第一个分区表项知道该分区是类型是7(NTFS分区)分区大小是0X100a718分区相对扇区号为0x3f可以算出分区的起始扇区是0X32FCD+0xbbe68a+3f=0Xbeb6c9
逻辑分区简介:
FAT16 FAT32 NTFS逻辑分区BOOTSECTOR
逻辑分区的BOOTSECTOR的第一个扇区它由以下部分组成 1.跳转指令 2.硬盘分区类型的文本字符名 3.分区参数块 4.扩展的分区参数块 5.启动指令块 6.合法性标志55AA
对于不同的分区类型这些块的内容与意义是不同的下面是FAT FAT32 NTFS各分区的BOOTSECTORD的内容语义的略图
0H 3 Byte 跳转指令 EB 3C 90
3H 8 Byte 硬盘分区类型的文本字符名 MSDOS5.0
0BH 25 Byte 分区参数块 0BH 2 Byte 每扇区字节数
0DH 1 Byte 每簇扇区数
0EH 2 Byte 保留扇区数
10H 1 Byte FAT表份数
11H 2 Byte 根目录入口项
13H 2 Byte 磁盘大小
15H 1 Byte 介质类型
16H 2 Byte FAT表占用扇区
18H 2 Byte 每道扇区数
1AH 2 Byte 磁头数
1CH 2 Byte 隐藏扇区数
24H 26 Byte 扩展的分区参数块 24H 1 Byte 物理磁盘号
25H 1 Byte 当前磁头号
26H 1 Byte 0x28或0x29
27H 4 Byte 磁盘序列号
2BH 11 Byte 卷表
36H 8 Byte 系统标识符
3EH 448 启动指令块&&
1FE 2 Byte 合法性标志 55AA
FAT16分区BOOTSECTOR结构图
0H 3 Byte 跳转指令 EB 58 90
3H 8 Byte 硬盘分区类型的文本 MSWIN4.1
0BH 25 Byte 分区参数块 0B 2 Byte 每扇区字节
0D 1 Byte 每簇扇区数
0E 2 Byte 保留扇区数
10 1 Byte FAT表份数
11 2 Byte 未用
15 1 Byte 介质类型
16 2 Byte 未用
18 2 Byte 每道扇区数
1A 2 Byte 磁头数
1C 2 Byte 隐藏扇区数
20 4 Byte 磁盘总扇区
24H 52 Byte 扩展的分区参数块 24 4 Byte FAT表占用
2C 1 Byte 根目录入口
40 1 Byte 物理磁盘号
42 1 Byte 0x29
43 4 Byte 磁盘序列号
47 8 Byte 系统标识符
52 8 Byte 系统标识符
58 422 启动指令块&&
1FE 2 合法性标志 55AA
FAT32分区BOOTSECTOR结构图
0H 3 Byte 跳转指令 EB 52 90
03H 8 Byte 硬盘分区类型的文本字符名 NTFS
0BH 25 Byte 分区参数块 0B 2 Byte 每扇区字节数
0D 1 Byte 每簇扇区数
0E 2 Byte 保留扇区数
10 1 Byte 0
11 4 Byte 0
15 1 Byte 介质类型
16 2 Byte 0
18 2 Byte 每道扇区数
1A 2 Byte 磁头数
1C 2 Byte 隐藏扇区数
20 4 Byte 0(未用)
24H 52 Byte 扩展的分区参数块 24 4 Byte 0(未用)
28 8 Byte 总扇区数
30 8 Byte MFT 表起始簇
38 8 Byte MFT镜像起始簇
40 4 Byte 每个记录段簇
44 4 Byte 每个索引占簇
48 8 Byte 磁盘序列号
50 4 Byte 校验和
54H 426 Byte 启动指令块&&
1FE 2 Byte 合法性标志 55AA
NTFS分区BOOTSECTOR结构图
FAT16 FAT32逻辑分区组成结构
FAT16和FAT32的分区组成结构比较类似其基本如下:
BOOT SETCOR
FAT16 FAT32逻辑盘结构图
其中FAT16的根目录区是固定大小的紧跟在FAT表后,而FAT32的根目录区可以是不固定大小的在BOOTSECTOR中提供了根目录区的第一个簇的簇号。
每一个目录项占20个字节这些字节的定义如下
0xA文件名 第一个字节为E5表示该目录项已被删除,为0表示未用,为2E表示是当前目录或者根目录。
0xB是文件属性BIT0文档 BIT1只读文件BIT2系统文件BIT3隐藏文件BIT4目录 BIT5卷标
0x10-0X13 文件创建日期
0x14-0X15 文件或目录起始簇号高16位(对FAT16无效为00 00)。
0x16-0X19 文件更改日期
0X1A-0X1B 文件或目录起始簇号低16位。
0X1C-0X1F 文件大小(对目录该项为0)
整个磁盘空间是按簇划分,在BOOTSECTOR中记录了每个簇的大小参数。
FAT表是用来记录整个磁盘空间的使用与分配情况的它的结构是一种链式结构。
他每16个字节或者32个字节表示一个簇。例如我们在FAT16分区找到第121簇的使用情况过程如下:
假设该分区大小为2G,起始扇区为63,FAT表为255个扇区,根目录有0X100个入口,每簇大小为64个扇区,隐含扇区为1个。
该簇在FAT表中的位置为:
A=121*2=241;B=A%512;IF(B!=0);B=1;
C=63+1+A/512+B;
读取扇区C到缓冲区取第A%512/2个字即为该扇区的下一个扇区,如果为0表示该扇区未用,为FF FF表示该扇区为最后一个扇区。其他的表示有下一个扇区。
该簇的物理磁盘扇区号是63+1+255*2+0X100*20/512+(121-2)*64
读于一个FAT32分区,要找到121簇的使用情况
假设该分区大小为4G,起始扇区为200048,FAT表为3997个扇区,每簇大小为8个扇区,根目录起始簇号为2,隐含扇区为32个。
该簇在FAT表中的位置为:
A=121*4=241;B=A%512;IF(B!=0);B=1;
C=20048+32+A/512+B;
读取扇区C到缓冲区取第A%512/4个双字即为该扇区的下一个扇区,如果为0表示该扇区未用,为FF FF FF FF表示该扇区为最后一个扇区。其他的表示有下一个扇区。
该簇的物理磁盘扇区号是7*2+(121-2)*8
经过上面的介绍我们就比较亲楚整个FAT16 FAT32分区的寻址方式
例如读取文件C:\Windows\SYSTEM.INI
首先找到逻辑盘C的起始扇区,然后读出他的根目录区,在根目录区中找到Windows子目录项,找到目录项中该子目录的起始簇,在FAT表中找到以该簇为起始簇的簇链,读出这些簇的所在的扇区内容然后找到文件名为SYTEM.INI的目录项,取得它的起始簇号,读出该簇为起始簇的簇链的所有扇区内容即可。
NTFS逻辑分区组成结构
NTFS分区的结构比FAT16和FAT32复杂。整个NTFS分区也是和FAT分区一样以簇为基本的的存储结构,但NTFS分区把整个分区的全部扇区都作为簇来划分,而FAT分区的BOOTSECTORFAT表,根目录(FAT32除外),作为另外的部分它的起始簇是在这些扇区之后的。
NTFS分区的结构大概如下
BOOTSECTOR记录了MFT表的起始簇号,通过BOOTSECTOR找到MFT的起始扇区,(方法是 磁盘起始扇区+簇号*每簇扇区数)。
MFT表是由很多个MFT记录构成,每个MFT记录表示一个文件的信息,MFT表将整个文件系统的内容,都当成文件来处理包括它自己本身。MFT表记录将文件的所有信息都当成属性来处理。
下面是MFT记录的头结构说明。
起始 长度 意义
0 4 MFT记录标志FILE
4 2 修复效验偏移
6 2 修复数据长度,包含第一个字节
10 2 序列号
12 2 链接个数(有多少个文件名链接在这个实际文件上)
14 2 第一个属性的起始于该MFT记录的哪一个字节
16 2 BIT0表示该记录中有属性值存于记录外,BIT1表示该记录中存有文件目录
18 4 该记录的有效字节数(记录头+所有属性长度和)
1C 4 该记录的长度
20 8 高2字节主MFT记录的记录号,低2字节0
28 2 所有属性加1
2A 6 修复数据依赖于记录长度
MFT记录结构示意图
MFT的记录由记录头和属性列表组成,每一个属性都有一个结构相同的属性头,属性头分两种,一种是属性内容在MFT表中,一种是属性的内容在磁盘分配的簇中,属性头分两部分对于所有属性第一部分结构是相同的第二部分结构不同:
偏移(16进制) 长度(16进制) 内容的意义
0 4 属性类型
4 2 属性总长度
8 1 属性数据是否存在MFT表中,0表示是,1表示存在磁盘分配的空间
9 1 属性名长度
A 2 属性内容相当于属性头起始地址的偏移
C 2 属性值是否压缩,0表示没压缩,1表示压缩
E 2 属性标志(通常为0)
属性头的第一部分内容(前16字节)
10 4 1属性数据长度
14 2 属性数据起始字节(相当于属性头起始地址)
16 2 属性在MFT属性中是第几个属性(从0开始)
属性内容在MFT表中的属性头第二部分内容
10 10H 属性内容所在簇计算的起始簇
20 2 属性数据起始字节(相当于属性头起始地址)
22 2 属性内容压缩方法(不太清楚)
28 8 为属性数据的分配空间大小
30 8 属性数据的实际大小
38 8 初始化数据长度(对于压缩的数据)
40 8 压缩前的长度(对于压缩数据)
48&&vcn 1cn runlength 数据所在簇的位置(具体解释在后面)
属性内容不在MFT表中的属性的第二部分内容
属性头后紧跟的是属性内容NTFS的标准的属性包括以下几种。
10H 标准信息属性 Standard information
20H 属性列表属性 Attribute list
30H 文件名属性 File Name
40H 卷表版本属性 Volume Version
50H 安全性描述属性 Security descriptor
60H 卷表名属性 Volume name
70H 卷表信息属性 Volume information
80H 数据内容属性 Data
90H 索引根目录属性 Index Root
A0H 索引分配表属性 Index Allocation
B0H 镜像属性 BitMap
C0H 链接属性 Symlink
D0H HPFS扩展属性信息属性 HPFS extended attributes information
E0H HPFS扩展属性 HPFS extended attributes
对于NTFS标准属性我并不完全了解下面就我所了解的部分进行介绍
偏移(16进制) 长度(16进制) 内容的意义
0 8 文件创建时间
8 8 文件内容最后一次修改时间
10 8 文件别的属性最后一次修改时间
18 8 文件最后一次修改时间
20 4 文件存取控制800文件内容是压缩的,400文件是一个连接,20文档标志,4系统文件标志,2隐含文件标志,1系统文件标志
24 C 未用通常为0
标准信息属性内容定义
偏移(16进制) 长度(16进制) 内容的意义
0 4 属性名
4 2 属性长度
6 1 属性字符名长度
8 8 属性簇号计算起始簇号
10 8 包含该属性的MFT记录号
38 8 文件存取控制38
1A 长度为BIT6*2 属性名的Unicode
属性列表属性内容定义
偏移(16进制) 长度(16进制) 内容的意义
0 8 该文件的根目录的MFT记录号
8 20 文件的时间信息(与基本信息中的相同)
28 8 属性分配空间
30 8 属性大小
38 8 文件属性 38 20 文档标志 4 系统文件标志,2隐含文件标志,1系统文件标识,39 08 压缩 3B10 目录
40 1 文件名长度
41 1 文件名类型 0 posix 1 unicode 2 dos 3both dos and unicode
42 Q长度为BIT40*2 文件名的Unicode
文件名属性内容定义
偏移(16进制) 长度(16进制) 内容的意义
0 4 总是30H
8 4 索引记录大小
C 4 每个簇可以记录的索引记录个数
10 4 总是10
14 4 整个属性大小+10H
1C 2 1如果有index allocation 属性存在
1E 2 标志位(不知道意义)
索引根目录属性定义
索引分配表属性 该属性分配索引空间以存放目录
如果一个属性内容无法在MFT表中放下,MFT表就会申请磁盘空间,存放在申请的空间中,属性列表定义中第48字节开始说明了该属性所在的磁盘簇号。下面是该字段的意义的英文说明以及简单的翻译:
Nonresident attributes are stored in intervals of clusters called runs. Each run is represented by its starting cluster and its length. The starting cluster of a run is coded as an offset to the starting cluster of the previous run. Length and starting cluster are variable size fields. The first byte of a run indicates the size of both. The size of the offset is stored in the high nibble, and the size of the length in the low nibble.
For compressed or sparse runs, the offset is 0, and the size of the offset is also 0. Each compression unit starts at a multiple of 16 clusters. If compression is possible, at the VCN of a unit will be one or more data runs followed by an empty run. If there are data runs for more than 16 clusters, the unit was not compressible.If there is no data run at all (only a large empty run), the unit consists of all zeroes.
Example: 21 20 ED 5 22 48 7 48 22 21 28 C8 DB
First run: 20 clusters starting from 5ED (5ED to 60D)
2nd run: 748 clusters starting from 5ED+ to 2F7D)
3rd run: 28 clusters starting from 2835+DBC8 (3FD to 425)
Note that the offset is interpreted as signed value
不存储于MFT表中的属性值被存储于分散的簇中称为RUN。每个RUNS由它的起始簇和长度构成。起始簇号和长度存储于变长的域中,一个RUN的第一个字节表明了起始簇号和簇的个数分别占用的字节数,跟着簇的个数数据,接着是起始簇号的数据。入果没有RUN存在着RUN的起始字节为0,RUNS是一个累加和,第二个RUN的起始簇号需要加上第一个RUN的起始簇号,以此类推。
NTFS分区的目录结构
NTFS分区的目录结构由文件名索引组成,它由 索引根目录属性(Index Root)
索引分配表属性 (Index Allocation) 索引根目录属性表明该MFT表记录是一个目录,索引分配表属性给该目录分配磁盘空间以便存储索引记录(Index buffer)。
索引记录由索引记录头和多个索引记录项主组成,一个索引记录大小为2k。其结构如下:
索引记录头
索引记录项1
索引记录项2
索引记录项N
偏移(16进制) 长度(16进制) 内容的意义
0 4 索引记录标志 总是INDEX
4 2 自修复数据存储位置 通常是28H
6 2 自修复数据长度
10 8 VCN值
18 2 头结构长度(第一个索引记录项入口字节地址-18)
1C 4 整个记录的长度
20 4 整个记录存储数据的长度
24 4 1表示没有索引记录项
28 A 自修复数据
索引记录头结构定义
索引记录项是在这个目录下的文件或目录的索引结构其定义如下
偏移(16进制) 长度(16进制) 内容的意义
0 8 该文件的MFT记录号
8 2 记录项长度
A 2 0x42+0x2*&0x50&可能是一个校验位
C 1 本记录项有没有子项(1表示有,为了支持DOS文件名)
10 8 父目录的MFT记录号
18 20 文件的时间信息
38 8 文件数据属性分配磁盘空间大小
50 1 文件名长度
51 1 文件名类型(详见文件名属性)
52 长度为BIT8*2 文件名(Unicode)
索引记录项定义
NFTS分区重要文件:
MFT表里存储了所有的文件的基本信息,MFT表的前16个记录是保留给系统使用的,这些文件是:
MFT 记录0 $MFT文件 即MFT表本身的信息
MFT 记录1 $MFTMIRR文件 MFT表的第一个记录内容的备份
MFT 记录2 $LogFile文件 缓冲区文件保证系统突然死机后,重启时用
MFT 记录3 $Volume文件 磁盘卷表文件
MFT 记录4 $Attrdef文件 属性定义文件,包含各种属性的定义
MFT 记录5 $Root文件 根目录文件,分区目录结构的入口
MFT 记录6 $BitMap文件
磁盘分配镜像文件,每个位表示一个簇是否被分配
MFT 记录7 $Boot文件 指向磁盘boot setor开始的16个扇区
MFT 记录8 $BadClus文件 磁盘坏簇的镜像文件
MFT 记录9 $Quota文件 不太清楚该文件的用处
MFT 记录10 $UpCase文件 大写字母对应的Unicode码
MFT 记录10 $MFT记录15 未用
最后介绍一下NTFS文件系统中一个文件例如:要读取文件F:\WINNT\SYSTEM32\ANSI .SYS
具体步骤如下:
1读取分区表信息,找到磁盘F的起始扇区。
2读取F盘的第一个扇区(分区的BOOTSETOR)取得分区的每簇大小,MFT表起始簇号,每簇大小等信息。
3.读取MFT表的第五个记录(根目录)找到目录索引所在簇号。
4.读取索引,查找WINNT目录所在的MFT记录号
5.读取WINNT目录的MFT记录,找到目录索引所在簇号。
6.读取索引,查找SYTEM32目录所在MFT记录号
7. 读取SYTEM32目录的MFT记录,找到目录索引所在簇号。
8. 读取索引,查找ANSI . SYS所在MFT记录号
9. 读取ANSI .SYS文件的MFT记录,找到它的DATA属性。
10.根据DATA属性中指定的文件数据存放位置读取出ANSI .SYS文件的数据
该用户从未签到
10楼的回复可真专业啊
TA的每日心情开心 12:31签到天数: 8 天[LV.3]八品县丞
很好的东西。谢谢
该用户从未签到
我是新手 希望大家多多帮助
TA的每日心情开心 09:18签到天数: 341 天[LV.8]三品御史
能说的再细点吗
TA的每日心情擦汗 09:05签到天数: 4 天[LV.2]九品芝麻官
文件分区存储结构?
TA的每日心情衰 09:39签到天数: 2 天[LV.1]布衣百姓
明白十六进制和二进制的的作用和转换,就不看不懂!一会儿就晕了!
硬盘基地推荐 /8
固态硬盘的价格也慢慢降到了大众可以接受的范围 可大多数人对固态硬盘的构造和原理一无所知,接下来 就随我一起揭开固态硬盘的神秘面纱...
更快速的SSD已经是用过都说好。在这场革命中,为了实现更快的速度,硬盘的接口也在不断进化,今天硬盘基地INTOHARD我们就来谈谈硬盘的主流接口都有哪些。
开启AHCI,4K对齐,安装专用驱动,使用原生SATA3.0接口等等,要比传统的HDD复杂一些。不当的使用方法,会极大的影响到SSD的性能跟寿命...
开盘数据恢复是硬盘物理故障数据恢复的一种特殊情况。当硬盘的磁组件的任何一个部件(如磁头、前置放大器、音圈、驱动臂等)损坏...
Flash数据恢复技术视频教程提供U盘无法识别,固态硬盘数据恢复解决方案
PC3000-UDMA/PC3000UDMA-E/PC3000-Express故障解决与教程专题
测试显示SSD硬盘在数据恢复方面遇到了新的挑战,这一问题在支持TRIM指令的固态硬盘上尤为严重,数据不能恢复...
SSD能恢复数据吗?相信很多正在使用SSD固态硬盘的用户都有这么疑问。毕竟大家都有错手删错文件的时候...下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
压缩的BCD码数136H表示成16进制数为 H
兮后宫の也
  微信的朋友圈发图片都会让你选可见范围的,公开或私密。如果选私密的话,好友是看不到这张图片的。不需要那个具体的版本,我记得是所有版本都支持。  如果已经发出的图片,也是可以修改可见范围的。点击图片后,右上方有个。。。按钮,如果图片是公开的,点“设为私密照片”,就看不到了。~如果你认可我的回答,请及时点击【采纳为满意回答】按钮~~手机提问的朋友在客户端右上角评价点【满...
为您推荐:
扫描下载二维码php bcd码压缩-把十进制数字压缩到十六进制数据中-Php应用-Php教程-壹聚教程网php bcd码压缩-把十进制数字压缩到十六进制数据中
下面我们一起来看和篇关于php bcd码压缩-把十进制数字压缩到十六进制数据中实例,希望文章给各位同学带来帮助哦。
例,php bcd码压缩-把十进制数字压缩到十六进制数据中
php bcd码压缩-把十进制数字压缩到十六进制数据中
例如 0091 压缩后 0x00 0x91
$string = '0091';
$bytes = Bytes::getBytes($string);
print_r($bytes);
$asc=Bytes::AscToHex($bytes,4);
//4位压缩成2位
print_r($asc);
[1] =& 145
echo Bytes::toStr($asc);
$hex=Bytes::HexToAsc($asc,2);
//反操作2位还原成4位
print_r($hex);
例,把十进制数字压缩到十六进制数据中
* php bcd码压缩
* 把十进制数字压缩到十六进制数据中
* Created on
class Bytes {
* 转换一个String字符串为byte数组
* @param $str 需要转换的字符串
* @param $bytes 目标byte数组
&&& public static function getBytes($string) {
&&&&&&& $bytes = array();
&&&&&&& for($i = 0; $i & strlen($string); $i++){
&&&&&&&&&&&& $bytes[] = ord($string[$i]);
&&&&&&& return $
* 将字节数组转化为String类型的数据
* @param $bytes 字节数组
* @param $str 目标字符串
* @return 一个String类型的数据
&&& public static function toStr($bytes) {
&&&&&&& $str = '';
&&&&&&& ($bytes as $ch) {
&&&&&&&&&&& $str .= bin2hex(chr($ch));
&&&&&&&&&& return $
* asc码转成16进制数据
* @param $asc asc数字字符串
* @param $AscLen 需要转换的字符串长度
* @return 16进制数组
* @author&
&&&& public static function AscToHex( $asc, $AscLen) {
&&&&&&& $i=0;
&&&&&&& $Hex=array();
&&&&&&& for($i = 0; 2*$i & $AscL $i++)
&&&&&&&&&&&
/*A:0x41(),a:0x61(),右移4位后都是0001,加0x90等0xa*/
&&&&&&&&&&& $Hex[$i] =& (chr($asc[2*$i]) && 4);
&&&&&&&&&&& if (!(chr($asc[2*$i]) &= '0' && chr($asc[2*$i]) &= '9' )){
&&&&&&&&&&&&&&& $Hex[$i] +=& 0x90;
&&&&&&&&&&& }
&&&&&&&&&&& if(2*$i+1 &= $AscLen){
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& $Hex[$i] |= (chr($asc[2*$i+1]) & 0x0f);
&&&&&&&&&&& if (!(chr($asc[2*$i+1]) &= '0' && chr($asc[2*$i+1]) &= '9' )){
&&&&&&&&&&&&&&& $Hex[$i] += 0x09;
&&&&&&&&&&& }
&&&&&&& return $H
* 将16进制的数据转换成asc码
* @param $Hex 16进制数组
* @param $HexLen 16进制数组长度
* @return asc数组
* @author&
&&& public static function HexToAsc($Hex, $HexLen) {
&&&&&&& $i=0;
&&&&&&& $Temp=0;
&&&&&&& for($i = 0; $i & $HexL $i++ )
&&&&&&&&&&& $Temp = ($Hex[$i] & 0xf0) && 4;
&&&&&&&&&&& if ($Temp & 10){
&&&&&&&&&&&&&&& $Asc[2*$i] =& (0x30 + $Temp);
&&&&&&&&&&& }else{
&&&&&&&&&&&&&&& $Asc[2*$i] =&& (0x37 + $Temp);
&&&&&&&&&&& }
&&&&&&&&&&& $Temp = $Hex[$i] & 0x0f;
&&&&&&&&&&& if ($Temp & 10){
&&&&&&&&&&&&&&& $Asc[2*$i+1] = (0x30 + $Temp);
&&&&&&&&&&& }else{
&&&&&&&&&&&&&&& $Asc[2*$i+1] =& (0x37 + $Temp);
&&&&&&&&&&& }
&&&&&&& return $A
上一页: &&&&&下一页:相关内容

我要回帖

更多关于 苹果电脑连接蓝牙耳机 的文章

 

随机推荐