swf文件结构中的大体数据类型.docx

上传人:b****7 文档编号:11433737 上传时间:2023-03-01 格式:DOCX 页数:22 大小:31.18KB
下载 相关 举报
swf文件结构中的大体数据类型.docx_第1页
第1页 / 共22页
swf文件结构中的大体数据类型.docx_第2页
第2页 / 共22页
swf文件结构中的大体数据类型.docx_第3页
第3页 / 共22页
swf文件结构中的大体数据类型.docx_第4页
第4页 / 共22页
swf文件结构中的大体数据类型.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

swf文件结构中的大体数据类型.docx

《swf文件结构中的大体数据类型.docx》由会员分享,可在线阅读,更多相关《swf文件结构中的大体数据类型.docx(22页珍藏版)》请在冰豆网上搜索。

swf文件结构中的大体数据类型.docx

swf文件结构中的大体数据类型

CHAPTER4

BasicDataTypes

ThissectiondescribesthebasicdatatypesthatmakeupthemorecomplexdatastructuresintheMacromediaFlash(SWF)fileformat.AllotherstructuresintheSWFfileformatarebuiltonthesefundamentaltypes.

这章节描述大体数据类型—在SWF文件里能够创建更多复杂数据结构。

所有在SWF文件里的其它结构都是由这些大体类型创建的。

Coordinatesandtwips坐标和缇

TheSWFfileformatstoresallx-ycoordinatesasintegers,usuallyinaunitofmeasurementcalledatwip.IntheSWFformat,atwipis1/20thofalogicalpixel.Alogicalpixelisthesameasascreenpixelwhenthefileisplayedat100%—thatis,withoutscaling.

Forexample,arectangle800twipswideby400twipshighisrenderedas40by20logicalpixels.Fractionalpixelsizesareapproximatedwithanti-aliasing.Arectangle790by390twipsbypixels)appearstohaveslightlyblurrededges.

Twipsareagoodcompromisebetweensizeandprecision.Theyprovidesub-pixelaccuracyforzoomingandpreciseplacementofobjects,whileconsumingveryfewbitsperintheSWFfileformatusethetraditionalgraphicsaxes:

xishorizontalandproceedsfromminimumvaluesatthelefttomaximumvaluesattheright,andyisverticalandproceedsfromminimumvaluesatthetoptomaximumvaluesatthebottom.

  swf文件格式用整数来存储X-Y坐标,它的单位默许的是缇(twip),20twip=1pixel。

在没有缩放的情形下,确实是100%播放时,swf中的一个逻辑像素和屏幕上的一个像素是对应的。

利用缇的益处确实是能够取得比利用像素更高的精度。

比如,一个800twips宽,400twips高的矩形,就会被说明成40×20像素的大小,这时矩形的边缘是没有锯齿的。

若是是790×390twips(×像素)的话,它的就会有轻微的模糊边缘。

   Twips一个大小与精度之间好的折衷方案。

当处置少数坐标位时,它们规定支持了缩放的亚像素的精准度(sub-pixel)和对象放置的精度。

在swf的坐标系里面,它采纳的是传统的图像的坐标,x轴是水平方向,而且是从左到右值是增大的;y轴是垂直方向的,而且从下到上是增加的。

Integertypesandbyteorder整数类型和字节顺序

TheSWFfileformatuses8-bit,16-bit,32-bit,64-bit,signed,andunsignedintegertypes.AllintegervaluesarestoredintheSWFfilebyusinglittle-endianbyteorder:

theleastsignificantbyteisstoredfirst,andthemostsignificantbyteisstoredlast,inthesamewayastheIntelx86architecture.ThebitorderwithinbytesintheSWFfileformatisbig-endian:

themostsignificantbitisstoredfirst,andtheleastsignificantbitisstoredlast.

swf文件中利用的8位、16位、32位、64位有符号和无符号的整数。

这些整数在swf文件中是以little-endian的顺序来存储的:

低字节在前,高字节在后,一样方式应用于IntelX86体系结构。

而每一个字节的每一名那么是按big-endian的顺序来排列的:

即高位在先,低位在后。

Forexample:

The32-bitvalue0x456e7120isstoredas20716e45.

The16-bitvalue0xe712isstoredas12e7.

Allintegertypesmustbebytealigned.Thatis,thefirstbitofanintegervaluemustbestoredinthefirstbitofabyteintheSWFfile.

比如一个32位的整数:

0x456e7120,它在文件中确实是以20716e45的格式存储的。

一个16位的整数:

0xe712,它在文件中确实是以12e7的格式存储的。

这种方式就称为little-endian。

在SWF文件中,所有整数类型必需是字节对齐的。

也确实是,一个整数值的第一名必需存储在一个字节的第一名。

little-endian要紧用在咱们此刻的PC的CPU中,big-endian那么应用在目前的Mac机械中(是指Power系列处置器)。

Signedintegersarerepresentedbyusingtraditional2’s-complementbitpatterns.Thesearethesignedintegerrepresentationsusedonmostmoderncomputerplatforms.Inthe2’scomplementsystem,negativenumbershave1asthefirstbit,andzeroandpositivenumbershave0asthefirstbit.Anegativenumber,-n,isrepresentedasthebitwiseoppositeofthepositive-zeronumbern-1.

符号整数通过利用2补数位形式(2’s-complementbitpatterns)来描述的。

这种符号整数表示法用于大多数现代微机平台。

在2’scomplement系统里,负数第一名设为1,而且0和正数第一名设为0.一个负数,-n,描述成那个数的正数n-1的反数(取反)。

IntegerTypes

TypeComment

SI8Signed8-bitintegervalue带符号8位整数

SI16Signed16-bitintegervalue带符号16位整数

SI32Signed32-bitintegervalue带符号32位整数

SI8[n]Signed8-bitarray—nisthenumberofarrayelements带符号8位数组,n是数组元素个数

SI16[n]Signed16-bitarray—nistheisnumberofarrayelements带符号16位数组,n是数组元素个数

UI8Unsigned8-bitintegervalue不带符号8位整数

UI16Unsigned16-bitintegervalue不带符号16位整数

UI32Unsigned32-bitintegervalue不带符号32位整数

UI8[n]Unsigned8-bitarray—nisthenumberofarrayelements不带符号8位数组,n是数组元素个数

UI16[n]Unsigned16-bitarray—nisthenumberofarrayelements不带符号16位数组,n是数组元素个数

UI24[n]Unsigned24-bitarray—nisthenumberofarrayelements不带符号24位数组,n是数组元素个数

UI32[n]Unsigned32-bitarray—nisthenumberofarrayelements不带符号32位数组,n是数组元素个数

UI64[n]Unsigned64-bitarray—nisthenumberofarrayelements不带符号64位数组,n是数组元素个数

Fixed-pointnumbers

TheSWFfileformatsupportstwotypesoffixed-pointnumbers:

32bitand1632-bitfixed-pointnumbersare.Thatis,thehigh16bitsrepresentthenumberbeforethedecimalpoint,andthelow16bitsrepresentthenumberafterthedecimalpoint.

swf文件格式支持两种类型的定点数:

32位定点数和16位定点数。

32位定点数的格式是格式的,小数点前面和小数点后面的每一部份各占2个字节(16位)。

FIXEDvaluesarestoredlike32-bitintegersintheSWFfile(usinglittle-endianbyteorder)andmustbebytealigned.

而且在SWF文件里,也是采纳了little-endian的形式—定点数像32位整数一样存储,必需字节对齐。

Forexample:

Therealvalueisequivalentto:

ThisvalueisstoredintheSWFfileas:

00800700SWF8andlatersupports16-bitsigned,fixed-pointnumbers.Thehigh8bitsrepresentthenumberbeforethedecimalpoint,andthelow8bitsrepresentthenumberafterthedecimalpoint.FIXED8valuesarestoredlike16-bitintegersintheSWFfile(usinglittle-endianbyteorder)andmustbebytealigned.

比如一个32位的实数:

=。

在文件中确实是以00800700的形式存储的。

16位的定点数和32位的是类似的,采纳格式,也是little-endian的形式。

16位的定点数是在Flash8及其以后版本中才被支持的。

在SWF文件里FIXED8数据存储时就像16位整数一样利用little-endian字节序,而且必需字节对齐。

Fixed-PointTypes

TypeComment

FIXED32-bitfixed-pointnumber32位定点数

FIXED816-bitfixed-pointnumber16位定点数

Floating-pointnumbers

SWF8andlatersupportstheuseofIEEEStandard754compatiblefloating-pointtypes.

Threetypesoffloating-pointnumbersaresupported.

Floating-PointTypes

TypeComment

FLOAT16Half-precision(16-bit)floating-pointnumber

FLOATSingle-precision(32-bit)IEEEStandard754compatible

DOUBLEDouble-precision(64-bit)IEEEStandard754compatible

FLOAT16isidenticaltothecharacteristicsofFLOATexceptforchangestothenumberofbitsallocatedtotheexponentandmantissa:

■1bitforthesign1位作为符号位

■5bitsfortheexponent,withanexponentbiasof165位是分派给指数部份,实际的

指数是5位数表示的数和16的差值;

■10bitsforthemantissa10位用来表示尾数

swf8及其后续的版本中支持和IEEEStandard754兼容的浮点数类型。

一共有三种类型,别离是:

Half-precision(16-bit)floating-pointnumber半精度、Single-precision(32-bit)单精度、Double-precision(64-bit)双精度。

除半精度的这种浮点型数据之外,其它两种都符合IEEEStandard754的标准。

半精度的也是和IEEEStandard754类似的,只是改变了标准中分派给尾数和指数的位数。

在半精度型的浮点数中,一名作为符号位;5位是分派给指数部份,实际的指数是5位数表示的数和16的差值;剩余的10位用来表示尾数。

Bitvalues

Bitvaluesarevariable-lengthbitfieldsthatcanrepresentthreetypesofnumbers:

1.Unsignedintegers2.Signedintegers3.Signedfixed-pointvalues.

   位值是用多少位来表示一个数值是不确信的,也确实是说,表示值的时候,位数是可变的。

它能够表示三种类型的数值:

无符号整数、有符号整数和有符号的格式的定点数。

位值不是位齐的,而其它一些数据类型,比如前面提到过的无符号整数等都是必需位齐的。

若是一个位齐的数据类型后面随着一个位值,那么最后几位若是不能填满的话,应该用0补齐。

  而且以上这些数若是需要扩展的话,是按符号扩展来进行扩展的。

Bitvalues位值.

一个字节由8位组成,为了节约存储空间,swf文件中很多的flag都利用位作为记录空间,比如UB[n],确实是由n位组成的一个unsignedintegerorlong数据,在利用bitvalues时,若是一个结构(Recordstruct)已经描述完成,但bit位指针不是8的倍数,需要利用到fillbits(0)将数据补足为8的倍数,进行字节对齐的操作.

Bitvaluesarevariable-lengthbitfieldsthatcanrepresentthreetypesofnumbers:

integers

integers

fixed-pointvalues.

Bitvaluesdonothavetobebytealigned.Othertypes(suchasUI8andUI16)arealwaysbytealigned.Ifabyte-alignedtypefollowsabitvalue,thelastbytethatcontainsthebitvalueispaddedwithzeros.

位值是一个变长位域,能描述三种数值:

一、不带符号整数;二、符号整数;3、带符号定点数

Bit值不用字节对齐。

其它类型(诸如UI8和UI16)常常字节对齐。

若是一个字节对齐类型跟从一个位值,那最后一个字节—包括位值,必需用0填充。

Thefollowingexampleisastreamof64bits,madeupof9-bitvaluesofvaryinglength,followedbyaUI16value:

下面那个例子是一个64位的数据流,由9个变长的位值组成,后面紧跟一个UI16值:

Thebitstreambeginswitha6-bitvalue(BV1),followedbya5-bitvalue(BV2)thatisspreadacrossByte1andByte2.BV3isspreadacrossByte2andByte3,whileBV4iswhollycontainedwithinByte3.Byte5containstwobitvalues:

BV7andBV8.BV9isfollowedbyabyte-alignedtype(UI16),sothelastfourbitsofByte6arepaddedwithzeros.

那个位数据流从一个6位值开始,紧接着5位值,那个值跨度Byte1和Byte2两个字节之间。

BV3跨度在Byte2和Byte3两个字节之间。

而BV4整个包括在Byte3中。

Byte5包括两个位值:

BV7和BV8。

BV9后面紧接一个字节对齐的UI16。

因此,第六个字节的最后四位要被0填充补齐。

BitValues

TypeComment

SB[nBits]Signed-bitvalue(nBitsisthenumberofbitsusedtostorethevalue)

UB[nBits]Unsigned-bitvalue(nBitsisthenumberofbitsusedtostorethevalue)

FB[nBits]Signed,fixed-pointbitvalue(nBitsisthenumberofbitsusedtostorethevalue)

SB[nBits]带符号的位值(nBits表示那个值有nBits位被存储)

UB[nBits]无符号位值(nBits表示那个值有nBits位被存储)

FB[nBits]带符号,定点小数位值(nBits表示那个值有nBits位被存储)

Whenanunsigned-bitvalueisexpandedintoalargerwordsize,theleftmostbitsarefilledwithzeros.Whenasigned-bitvalueisexpandedintoalargerwordsize,thehighbitiscopiedtotheleftmostbits.

当一个无符号的位值被扩展到一个largerword大小,最左侧的位所有被0填充。

当一个带符号的位值被扩展到一个largerword大小,最高位被复制到最左侧的所有位。

Thisexpansioniscalledsignextension.Forexample,the4-bitunsignedvalueUB[4]=1110wouldbeexpandedtoa16-bitvaluelikethis:

0000000000001110=14.Thesamevalueinterpretedasasignedvalue,SB[4]=1110wouldbeexpandedto110=–2.Signed-bitvaluesaresimilarbutmusttakeaccountofthesignbit.Thesignedvalueof35isrepresentedasSB[7]=0100011.Theextrazerobitisrequired;otherwisethehighbitissignextendedandthevalueisinterpretedasnegative.

这种扩展被称为符号扩展。

例如:

一个4-bit无符号值UB[4]=1110,将被扩展成一个16-bit的值,像如此:

0000000000001110=14。

一样的值被说明成一个带符号的值,SB[4]=1110将被扩展成

110=-2。

符号位的值是相似的,但必需与符号位相同。

带符号的值35被描述成SB[7]=0100011。

扩展位0是必需的;不然,最高位被扩展置位,那个值就被描述成负数了。

Fixed-pointbitvaluesare32-bitsigned,fixed-pointnumbers.Thatis,thehigh16bitsrepresentthenumberbeforethedecimalpoint,andthelow16bitsrepresentthenumberafterthedecimalpoint.Afixed-pointbitvalueisidenticaltoasigned-bitvalue,buttheinterpretationisdifferent.Forexample,a19-bit,signed-bitvalueof0x30000isinterpretedas196608decimal.The19-bit,fixed-pointbitvalue0x30000isinterpretedas.Theformatofthisvalueiseffectivelyratherthan.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1