TIF图像文件结构详解-程序员宅基地

技术标签: 算法  计算机视觉  图像处理  

TIF图像文件结构详解

报告时间:2022年06月24日

报告人:赵进

报告摘要:本文主要针对TIF格式图像文件结构进行详解,并且根据TIF文件结构,应用C++语言实现tif波纹板深度图像的读写。

应用软件:VS2019          

1TIF图像说明

TIFF是最复杂的一种位图文件格式。TIFF是基于标记的文件格式,它广泛地应用于对图像质量要求较高的图像的存储与转换。由于它的结构灵活和包容性大,它已成为图像文件格式的一种标准,绝大多数图像系统都支持这种格式。

 
下面创建了一个5*3像素的tif文件。详细分析一下:

3.1 分析IFH

1IFH共占用8个字节,根据上图可知为:49 49 2a 00 3a 00 00 00。字节顺序标志位(49 49),49转换为10进制为73,对应字母为I,即标志位位II,也就是小字节在前。

2TIFF标志位(2a 00),表示42

3IFD偏移量(3a 00 00 00),所以我们直接跳到3a查询第一个IFD,也就是第4(00000030),a列,所得数值为0f

3.2 IFD

根据第四行,第a列确定的数值为0fDE个数(0f 00),说明有15DE

3.3 DE

DE组成,分为TAG(2字节)、数据类型(2字节)、数量(4字节)、数值或指针(4字节)

说明:

1)这里需要说明的是字节是要按照从右向左方向读取。

2)例如:有两个字节(00 10),那么应该编译成01 00

3.3.1 第一个DE(起始3c)

TAG(fe 00)

通过查阅上表为NewSubfileType

数据类型(04 00)

通过查询数据类型表格可知,数据类型为4 = LONG 32-bit (4-byte) unsigned integer.

数量(01 00 00 00)

所以数量为1

数值(00 00 00 00)

数值为0,具体含义参见上表或者链接地址说明。

3.3.2 第二个DE(起始48)

TAG(00 01)

通过查阅上表代码(0100)ImageWidth

数据类型(04 00)

通过查询数据类型表格可知,数据类型为4 = LONG 32-bit (4-byte) unsigned integer.

数量(01 00 00 00)

所以数量为1

数值(00 00 00 05)

数值为5,印证了上面说的这个tif宽为5个像素。

3.3.3 第三个DE(起始54)

TAG(01 01)

通过查阅上表代码(0101)ImageLength

数据类型(04 00)

通过查询数据类型表格可知,数据类型为4 = LONG 32-bit (4-byte) unsigned integer.

数量(01 00 00 00)

所以数量为1

数值(00 00 00 03)

数值为3,印证了上面说的这个tif高为3个像素。

3.3.4 第四个DE(起始60)

TAG(02 01)

通过查阅上表代码(0102)BitsPerSample

数据类型(03 00)

通过查询数据类型表格可知,数据类型为3 = SHORT 16-bit (2-byte) unsigned integer

数量(03 00 00 00)

所以数量为3

数值(f4 00 00 00)

数值为f4

3.3.5 第五个DE(起始6c)

TAG(03 01)

通过查阅上表代码(0103)Compression

数据类型(03 00)

通过查询数据类型表格可知,数据类型为3 = SHORT 16-bit (2-byte) unsigned integer

数量(01 00 00 00)

所以数量为1

数值(05 00 00 00)

数值为55 = LZW

3.3.6 第六个DE(起始78)

TAG(06 01)

通过查阅上表代码(0106)PhotometricInterpretation

数据类型(03 00)

通过查询数据类型表格可知,数据类型为3 = SHORT 16-bit (2-byte) unsigned integer

数量(01 00 00 00)

所以数量为1

数值(02 00 00 00)

数值为22 = RGB. 正常RGB图像,存储顺序为RGB.

3.3.7 第七个DE(起始84)

TAG(11 01)

通过查阅上表代码(0111)StripOffsets//起止代码

数据类型(04 00)

通过查询数据类型表格可知,数据类型为4 = LONG 32-bit (4-byte) unsigned integer.

数量(01 00 00 00)

所以数量为1

数值(08 00 00 00)

数值为8.

3.3.8 第八个DE(起始90)

TAG(15 01)

通过查阅上表代码(0115)SamplesPerPixel

数据类型(03 00)

通过查询数据类型表格可知,数据类型为3 = SHORT 16-bit (2-byte) unsigned integer

数量(01 00 00 00)

所以数量为1

数值(03 00 00 00)

数值为3,也就是RGB三个通道。

3.3.9 第九个DE(起始9c)

TAG(16 01)

通过查阅上表代码(0116)RowsPerStrip

数据类型(04 00)

通过查询数据类型表格可知,数据类型为4 = LONG 32-bit (4-byte) unsigned integer.

数量(01 00 00 00)

所以数量为1

数值(03 00 00 00)

数值为3,这里的3指的高为3个像素。

3.3.10 第十个DE(起始a8)

TAG(17 01)

通过查阅上表代码(0117)StripByteCounts

数据类型(04 00)

通过查询数据类型表格可知,数据类型为4 = LONG 32-bit (4-byte) unsigned integer.

数量(01 00 00 00)

所以数量为1

数值(32 00 00 00)

数值为50

3.3.11 第十一个DE(起始b4)

TAG(1a 01)

通过查阅上表代码(011a)XResolution

数据类型(05 00)

通过查询数据类型表格可知,数据类型为5 = RATIONAL Two LONGs: the first represents the numerator

数量(01 00 00 00)

所以数量为1

数值(fa 00 00 00)

数值为fa

3.3.12 第十二个DE(起始c0)

TAG(1b 01)

通过查阅上表代码(011b)YResolution

数据类型(05 00)

通过查询数据类型表格可知,数据类型为5 = RATIONAL Two LONGs: the first represents the numerator

数量(01 00 00 00)

所以数量为1

数值(02 01 00 00)

数值为102

3.3.13 第十三个DE(起始cc)

TAG(1c 01)

通过查阅上表代码(011c)PlanarConfiguration

数据类型(03 00)

通过查询数据类型表格可知,数据类型为3 = SHORT 16-bit (2-byte) unsigned integer

数量(01 00 00 00)

所以数量为1

数值(01 00 00 00)

数值为1

3.3.14 第十四个DE(起始d8)

TAG(28 01)

通过查阅上表代码(0128)ResolutionUnit

数据类型(03 00)

通过查询数据类型表格可知,数据类型为3 = SHORT 16-bit (2-byte) unsigned integer

数量(01 00 00 00)

所以数量为1

数值(02 00 00 00)

数值为2

3.3.15 第十五个DE(起始e4)

TAG(3d 01)

通过查阅上表代码(013d)****

数据类型(03 00)

通过查询数据类型表格可知,数据类型为3 = SHORT 16-bit (2-byte) unsigned integer

数量(01 00 00 00)

所以数量为1

数值(02 00 00 00)

数值为2

补充说明:

TIFF文件中的三个关键词是:图像文件头Image File Header(IFH) 图像文件目录Image File Directory(IFD)和目录项Directory Entry(DE)。每一幅图像是以8字节的IFH开始的,这个IFH指向了第一个IFDIFD包含了图像的各种信息, 同时也包含了一个指向实际图像数据的指针。

IFH的构成:

Byte 0-1: 字节顺序标志位, 值为II或者MM。II表示小字节在前, 又称为little-endian。MM表示大字节在前,又成为big-endian。

Byte 2-3: TIFF的标志位,一般都是42

Byte 4-7: 第一个IFD的偏移量。可以在任意位置, 但必须是在一个字的边界,也就是说必须是2的整数倍。

IFD的构成(0代表此IFD的起始位置)

Byte 0-1: 表示此IFD包含了多少个DE,假设数目为n

Byt

TIF图像文件结构详解

报告时间:2022年06月24日

报告人:赵进

报告摘要:本文主要针对TIF格式图像文件结构进行详解,并且根据TIF文件结构,应用C++语言实现tif波纹板深度图像的读写。

应用软件:VS2019          

1TIF图像说明

TIFF是最复杂的一种位图文件格式。TIFF是基于标记的文件格式,它广泛地应用于对图像质量要求较高的图像的存储与转换。由于它的结构灵活和包容性大,它已成为图像文件格式的一种标准,绝大多数图像系统都支持这种格式。

TIFF 是一个灵活适应性强的文件格式,通过在文件头中包含标签它能够在一个文件中处理多幅图像和数据。标签能够标明图像的如图像大小这样的基本几何尺寸或者定义图像数据是如何排列的并且是否使用了各种各样的图像压缩选项。例如,TIFF可以包含JPEG行程长度编码压缩的图像。TIFF文件也可以包含基于矢量的裁剪区域(剪切或者构成主体图像的轮廓)。使用无损格式存储图像的能力使TIFF文件成为图像存档的有效方法。与JPEG不同,TIFF文件可以编辑然后重新存储而不会有压缩损失。其它的一些TIFF文件选项包括多层或者多页。

  TIFF有一个使用LZW压缩的选项,这是一种减小文件大小的无损技术,但是这项技术在不同的司法权限内为几个专利所涵盖。到了2005年,除了一个之外这些专利都已经到期,其中包括Unisys所拥有的广为人知又有很多争议的专利。另外一个著名的专利是IBM拥有的将在2006年8月11日到期的专利,IBM也没有要加强它的意思(who has shown no interest to date in enforcing it)。

  每个TIFF文件都是从指示字节顺序的两个字节开始的。“II”表示小字节在先、“MM”表示大字节在先字节顺序。后面的两个字节表示数字42。数字42是“为了其深刻的哲学意义"而选择的。 42的读法取决于头两个字节所表示的字节顺序。整个文件根据所指出的字节顺序进行读取(大小端的顺序)。

2TIF图像文件构成

2.1TIF文件概述

TIFF文件以.tif为扩展名。TIFF文件结构,这里不得不要提出三个关键词:IFH(图像文件头)IFD(图像文件目录)DE(目录项)。其中,IFH包含三项功能,分别是字节顺序标志位、TIFF标志位和第一个IFD偏移量。最后一个功能负责指向IFD的开端。当然,从IFH到第一个IFD还有一段字节,对于IFDDE,他们是包含的关系。一个TIFF文件可以有多个IFD。而每个IFD有记录了DE的个数以及DE的详细内容,最后还记录了下一个IFD的偏移量。而不是直接下一个IFD。如下图1就是一个tif文件的详细结构。

 
                                                                            1.tif详细结构

2.2IFH(图像文件头)

下图2可知IFH包括三部分组成,详细介绍如下:在每一个TIFF文件中第一个数据结构称为图像文件头或IFH,它是图像文件体系结构的最高层。这个结构在一个TIFF文件中是惟一的,有固定的位置。它位于文件的开始部分,包含了正确解释TIFF文件的其他部分所需的必要信息。

 
IFH数据结构包含3个成员共计8个字节,Byte order成员可能是“MM”(0x4d4d)“II”(0x4949)0x4d4d表示该TIFF图是摩托罗拉整数格式 0x4949表示该图是Intel整数格式;Version成员总是包含十进制42(0x2a),它用于进一步校验该文件是否为TIF格式,42这个数并不是一般人 想象中的那样认为是tif软件的版本,实际上,42这个数大概永远不会变化;第三个成员是IFD

2文件头三部分

2.2.1字节顺序标志位

占用两个字节(byte 0-1),值为II或者MM。II表示小字节在前, 又称为little-endian。MM表示大字节在前,又成为big-endian。

2.2.2 TIFF标志位

占用两个字节(byte 2-3),一般都是42。

2.2.3第一个IFD的偏移量

占用4个字节(byte 4-7),可以在任意位置, 但必须是在一个字的边界,也就是说必须是2的整数倍。需要注意的是,这里是IFD的偏移量。也就是说,从这个位置到第一个IFD中间还有一些字节。

2.3IFD(图像文件目录)

图像文件目录也包括三部分组成。

1.Directory Entry Count:指出在该IFDDE的个数;

2.Directory Entry:共12个字节,需要指出的是,DE的个数是不定的,因为每个DE只标识了图像的一个属性,那么这幅图像有N个属性就会有NDE,用户甚至可添加自定义的标记属性,这就是为什么称TIF格式文件为可扩充标记的文件的原因。

3.Offset to next IFD Or NULL:下一个IFD相对于文件开始处的位置,这是一个链式构成。如果该数字为0,表示已经是最后一个IFD。当然,如果该TIF文件只包含了一幅图像,那么就只有一个IFD,显然这个偏移量也会等于0

2.3.1 DE个数

占用两个字节(byte 0~1),当然这里的0表示的是相对位置,表示此IFD包含多少个DE,假设数据为n个。

2.3.2 DE的详细描述

占用n * 12 个字节,这一部分是DE的详细描述,每个DE占用12个字节(详细后面会说),所以nDE总共占用2~(n*12+1)。这里可以想一下为什么要加1

2.3.3 下一个IFD偏移量

占用4个字节,IFD偏移量,如果没有,则为0

2.4 DE(图像目录项)

IFDTIFF文件中第2个数据结构,它是一个名为标记(tag)的用于区分一个或多个可变长度数据块的表,标记中包含了有关于图像的所有信息。IFD提供了一系列的指针(索引),这些指针告诉我们各种有关的数据字段在文件中的开始位置,并给出每个字段的数据类型及长度。这种方法允许数据字段定位在文件的任何地方,且可以是任意长度,因此文件格式十分灵活。

IFDTIF图中最重要的数据结构,它包含了一个TIF文件中最重要的信息,一个TIF图可能有多个IFD,这说明文件中有多个图像,每个IFD标识1个图像的基本属性。 IFD结构中包含了三类成员,Directory Entry Count指出该结构里面有多少个目录入口;接下来就是N个线性排列的DE序列,数量不定(这就是 为什么称TIF格式文件为可扩充标记的文件,甚至用户可以添加自定义的标记属性),每个DE标识了图像的某一个属性;最后就是一个偏移量, 标识下一个文件目录相对于文件开始处的位置,当然,如果该TIF文件只包含了一幅图像,那么就只有一个IFD,显然,这个偏移量就等于0;如下图3是由DE 
分出来的目录项。

3 DE分出来的目录项。

2.4.1 TAG标识符

TAG:是该属性的标签编号(TagID),在图像文件目录中,它是按照升序排列的(但不一定是连续的)。这些编号在TIF格式官方白皮书中可以查到相应的含义,表格见参考文献(1)所示

2.4.2 数据类型

占字节数(2-3),数据类型。TIF官方指定的有5种数据类型(但是在TIFF6.0中,定义了12种数据类型),官方的数据类型:

type值          数据类型                 说明

-------------------------------------------------------------------------------------------------------------------------

0001            Byte                           字节型

0002            Ascii                 文本类型,7Ascii码加1位二进制0

0003          Integer                         整型

0004           Long                          长整型(4个字节)

0005       RATIONAL               分数类型,由两个Long组成,第1个是分子,第2个是分母

-------------------------------------------------------------------------------------------------------------------------

                                                           

2.4.3 数量

length上述该种数据类型的数据的个数,而不是某个数据的长度。占用4个字节数(4-7)。通过类型和数量可以确定存储此TAG的数据需要占据的字节数

2.4.4 数值或指针

占用4个字节(8-11) 如果占用的字节数少于4 则数据直接存于此。 如果超过4个,则这里存放的是指向实际数据的指针。valueOffset:是tagID代表的变量值相对文件开始处的偏移量,但如果变量值占用的空间不多于4个字节(例如只有1Integer类型的值),那么该值就直接存放在valueOffset中,没必要再另外指向一个地方了。

3TIF图像实例

 
下面创建了一个5*3像素的tif文件。详细分析一下:

3.1 分析IFH

1IFH共占用8个字节,根据上图可知为:49 49 2a 00 3a 00 00 00。字节顺序标志位(49 49),49转换为10进制为73,对应字母为I,即标志位位II,也就是小字节在前。

2TIFF标志位(2a 00),表示42

3IFD偏移量(3a 00 00 00),所以我们直接跳到3a查询第一个IFD,也就是第4(00000030),a列,所得数值为0f

3.2 IFD

根据第四行,第a列确定的数值为0fDE个数(0f 00),说明有15DE

3.3 DE

DE组成,分为TAG(2字节)、数据类型(2字节)、数量(4字节)、数值或指针(4字节)

说明:

1)这里需要说明的是字节是要按照从右向左方向读取。

2)例如:有两个字节(00 10),那么应该编译成01 00

3.3.1 第一个DE(起始3c)

TAG(fe 00)

通过查阅上表为NewSubfileType

数据类型(04 00)

通过查询数据类型表格可知,数据类型为4 = LONG 32-bit (4-byte) unsigned integer.

数量(01 00 00 00)

所以数量为1

数值(00 00 00 00)

数值为0,具体含义参见上表或者链接地址说明。

3.3.2 第二个DE(起始48)

TAG(00 01)

通过查阅上表代码(0100)ImageWidth

数据类型(04 00)

通过查询数据类型表格可知,数据类型为4 = LONG 32-bit (4-byte) unsigned integer.

数量(01 00 00 00)

所以数量为1

数值(00 00 00 05)

数值为5,印证了上面说的这个tif宽为5个像素。

3.3.3 第三个DE(起始54)

TAG(01 01)

通过查阅上表代码(0101)ImageLength

数据类型(04 00)

通过查询数据类型表格可知,数据类型为4 = LONG 32-bit (4-byte) unsigned integer.

数量(01 00 00 00)

所以数量为1

数值(00 00 00 03)

数值为3,印证了上面说的这个tif高为3个像素。

3.3.4 第四个DE(起始60)

TAG(02 01)

通过查阅上表代码(0102)BitsPerSample

数据类型(03 00)

通过查询数据类型表格可知,数据类型为3 = SHORT 16-bit (2-byte) unsigned integer

数量(03 00 00 00)

所以数量为3

数值(f4 00 00 00)

数值为f4

3.3.5 第五个DE(起始6c)

TAG(03 01)

通过查阅上表代码(0103)Compression

数据类型(03 00)

通过查询数据类型表格可知,数据类型为3 = SHORT 16-bit (2-byte) unsigned integer

数量(01 00 00 00)

所以数量为1

数值(05 00 00 00)

数值为55 = LZW

3.3.6 第六个DE(起始78)

TAG(06 01)

通过查阅上表代码(0106)PhotometricInterpretation

数据类型(03 00)

通过查询数据类型表格可知,数据类型为3 = SHORT 16-bit (2-byte) unsigned integer

数量(01 00 00 00)

所以数量为1

数值(02 00 00 00)

数值为22 = RGB. 正常RGB图像,存储顺序为RGB.

3.3.7 第七个DE(起始84)

TAG(11 01)

通过查阅上表代码(0111)StripOffsets//起止代码

数据类型(04 00)

通过查询数据类型表格可知,数据类型为4 = LONG 32-bit (4-byte) unsigned integer.

数量(01 00 00 00)

所以数量为1

数值(08 00 00 00)

数值为8.

3.3.8 第八个DE(起始90)

TAG(15 01)

通过查阅上表代码(0115)SamplesPerPixel

数据类型(03 00)

通过查询数据类型表格可知,数据类型为3 = SHORT 16-bit (2-byte) unsigned integer

数量(01 00 00 00)

所以数量为1

数值(03 00 00 00)

数值为3,也就是RGB三个通道。

3.3.9 第九个DE(起始9c)

TAG(16 01)

通过查阅上表代码(0116)RowsPerStrip

数据类型(04 00)

通过查询数据类型表格可知,数据类型为4 = LONG 32-bit (4-byte) unsigned integer.

数量(01 00 00 00)

所以数量为1

数值(03 00 00 00)

数值为3,这里的3指的高为3个像素。

3.3.10 第十个DE(起始a8)

TAG(17 01)

通过查阅上表代码(0117)StripByteCounts

数据类型(04 00)

通过查询数据类型表格可知,数据类型为4 = LONG 32-bit (4-byte) unsigned integer.

数量(01 00 00 00)

所以数量为1

数值(32 00 00 00)

数值为50

3.3.11 第十一个DE(起始b4)

TAG(1a 01)

通过查阅上表代码(011a)XResolution

数据类型(05 00)

通过查询数据类型表格可知,数据类型为5 = RATIONAL Two LONGs: the first represents the numerator

数量(01 00 00 00)

所以数量为1

数值(fa 00 00 00)

数值为fa

3.3.12 第十二个DE(起始c0)

TAG(1b 01)

通过查阅上表代码(011b)YResolution

数据类型(05 00)

通过查询数据类型表格可知,数据类型为5 = RATIONAL Two LONGs: the first represents the numerator

数量(01 00 00 00)

所以数量为1

数值(02 01 00 00)

数值为102

3.3.13 第十三个DE(起始cc)

TAG(1c 01)

通过查阅上表代码(011c)PlanarConfiguration

数据类型(03 00)

通过查询数据类型表格可知,数据类型为3 = SHORT 16-bit (2-byte) unsigned integer

数量(01 00 00 00)

所以数量为1

数值(01 00 00 00)

数值为1

3.3.14 第十四个DE(起始d8)

TAG(28 01)

通过查阅上表代码(0128)ResolutionUnit

数据类型(03 00)

通过查询数据类型表格可知,数据类型为3 = SHORT 16-bit (2-byte) unsigned integer

数量(01 00 00 00)

所以数量为1

数值(02 00 00 00)

数值为2

3.3.15 第十五个DE(起始e4)

TAG(3d 01)

通过查阅上表代码(013d)****

数据类型(03 00)

通过查询数据类型表格可知,数据类型为3 = SHORT 16-bit (2-byte) unsigned integer

数量(01 00 00 00)

所以数量为1

数值(02 00 00 00)

数值为2

补充说明:

TIFF文件中的三个关键词是:图像文件头Image File Header(IFH) 图像文件目录Image File Directory(IFD)和目录项Directory Entry(DE)。每一幅图像是以8字节的IFH开始的,这个IFH指向了第一个IFDIFD包含了图像的各种信息, 同时也包含了一个指向实际图像数据的指针。

IFH的构成:

Byte 0-1: 字节顺序标志位, 值为II或者MM。II表示小字节在前, 又称为little-endian。MM表示大字节在前,又成为big-endian。

Byte 2-3: TIFF的标志位,一般都是42

Byte 4-7: 第一个IFD的偏移量。可以在任意位置, 但必须是在一个字的边界,也就是说必须是2的整数倍。

IFD的构成(0代表此IFD的起始位置)

Byte 0-1: 表示此IFD包含了多少个DE,假设数目为n

Byte 2-(n*12+1): n个DE

Byte (n*12+2)-(n*12+5): 下一个IFD的偏移量,如果没有则置为0

DE的构成:

Byte 0-1: 此TAG的唯一标识

Byte 2-3: 数据类型。

Byte 4-7: 数量。通过类型和数量可以确定存储此TAG的数据需要占据的字节数

Byte 8-11: 如果占用的字节数少于4, 则数据直接存于此。 如果超过4个,则这里存放的是指向实际数据的指针

参考文献:

(1)TIFF格式详解https://blog.csdn.net/oYinHeZhiGuang/article/details/121710467

(2)博客园:https://www.cnblogs.com/gywei/p/3393816.html

(3)代码参考:CSDN:https://blog.csdn.net/Terrence_Pai/article/details/124356029

(4)CSDN:https://blog.csdn.net/qq_24003917/article/details/107425216

(5)CSDN:https://blog.csdn.net/weixin_44886683/article/details/119188230                  

(6)https://wenku.baidu.com/view/aeea12c69d3143323968011ca300a6c30c22f19a.html

(7)tif图像研究:https://blog.csdn.net/xiyangxiaoguo/article/details/10011380e 2-(n*12+1): n个DE

Byte (n*12+2)-(n*12+5): 下一个IFD的偏移量,如果没有则置为0

DE的构成:

Byte 0-1: 此TAG的唯一标识

Byte 2-3: 数据类型。

Byte 4-7: 数量。通过类型和数量可以确定存储此TAG的数据需要占据的字节数

Byte 8-11: 如果占用的字节数少于4, 则数据直接存于此。 如果超过4个,则这里存放的是指向实际数据的指针

参考文献:

(1)TIFF格式详解https://blog.csdn.net/oYinHeZhiGuang/article/details/121710467

(2)博客园:https://www.cnblogs.com/gywei/p/3393816.html

(3)代码参考:CSDN:https://blog.csdn.net/Terrence_Pai/article/details/124356029

(4)CSDN:https://blog.csdn.net/qq_24003917/article/details/107425216

(5)CSDN:https://blog.csdn.net/weixin_44886683/article/details/119188230                  

(6)tif格式详解 - 百度文库

(7)tif图像研究:https://blog.csdn.net/xiyangxiaoguo/article/details/10011380

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Scream1314/article/details/131885395

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签