- 浏览: 586523 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (365)
- Tomcat调优 (2)
- Apache Http (20)
- Webserver安装 (5)
- Linux安装 (28)
- Linux常用命令 (17)
- C语言及网络编程 (10)
- 文件系统 (0)
- Lucene (12)
- Hadoop (9)
- FastDFS (8)
- 报表 (0)
- 性能测试 (1)
- JAVA (18)
- CSharp (3)
- C++ (38)
- BI (0)
- 数据挖掘 (0)
- 数据采集 (0)
- 网址收集整理 (3)
- Resin (0)
- JBoss (0)
- nginx (0)
- 数据结构 (1)
- 随记 (5)
- Katta (1)
- Shell (6)
- webservice (0)
- JBPM (2)
- JQuery (6)
- Flex (41)
- SSH (0)
- javascript (7)
- php (13)
- 数据库 (6)
- 搜索引擎排序 (2)
- LVS (3)
- solr (2)
- windows (1)
- mysql (3)
- 营销软件 (1)
- tfs (1)
- memcache (5)
- 分布式搜索 (3)
- 关注的博客 (1)
- Android (2)
- clucene (11)
- 综合 (1)
- c c++ 多线程 (6)
- Linux (1)
- 注册码 (1)
- 文件类型转换 (3)
- Linux 与 asp.net (2)
- perl (5)
- coreseek (1)
- 阅读器 (2)
- SEO (1)
- 励志 (1)
- 在线性能测试工具 (1)
- yii (7)
- 服务器监控 (1)
- 广告 (1)
- 代理服务 (5)
- zookeeper (8)
- 广告联盟 (0)
- 常用软件下载 (1)
- 架设自已的站点心得 (0)
最新评论
-
terry07:
java 7 用这个就可以了 Desktop desktop ...
关于java Runtime.getRunTime.exec(String command)的使用 -
HSINKING:
怎么设置打开的dos 窗口是指定的路径下
关于java调用bat文件,不打开窗口 -
liubang201010:
hyperic hq更多参考资料,请访问:http://www ...
hyperic-hq -
^=^:
STDIN_FILENO是unistd.h中定义的一个numb ...
深入理解dup和dup2的用法 -
antor:
留个记号,学习了
[转]用java流方式判断文件类型
分析一个简单的swf文件[转贴]用Flash8新建一个fla文档,画布尺寸设为550*400,帧速为24帧/s,背景色为白色。第一帧的帧标签命名为"start",在动作面板上写上AS Code
stop();第2帧命名为"end",动作面板里写AS Code
prevFrame();。然后发布设置里:发布成FlashPlayer8,不压缩影片。
然后保存、输出swf。用UltraEdit32打开输出的swf,看到的画面如下图所示
下面我们来分析一些这些16进制数字的意义。
对于SWF中数据格式及数据存储方式不明白,请先到swf文件格式--基本数据类型中看看。
我们先看下关于SWF文件头的官方说明
区域 数据类型 含义
标识 UI8(8位二进制无符号整数) "F"表示该文件是未压缩的
"C"表示压缩文件(SWF6及后续版本支持)
标识 UI8 总是"W"
标识 UI8 总是 "S"
版本 UI8 SWF文件版本
文件大小 UI32 文件字节大小
画面尺寸 RECT 以twips为单位
帧速 UI16 8.8形式的定点小数
总帧数 UI16 总帧数
OK了,对应着它我们来分析下刚才生成的文件
数据 含义
46 "F",表示未压缩的
57 "W"
53 "S"
08 SWF文件版本为8
4C 00 00 00 文件大小为 4*16+12=76字节
再往后就是画布尺寸了,它是一个RECT结构的数据,我们先看下RECT结构说明:
名字 类型 含义
Nbits UB[5] 表示每个数字必须的二进制位数
Xmin SB[Nbits] x最小值
Xmax SB[Nbits] x最大值
Ymin SB[Nbits] Y最小值
Ymax SB[Nbits] Y最大值
我们生成的这个SWF文件中的数据是78 00 ...,我们先取前5位二进制,先确定好数据位数。78的二进制形式是:0111 1000,取前5位就是0111 1,它表示的十进制数是15=8+4+2+1,也就是说,Xmin,Xmax,Ymin,Ymax都要15位二进制数来表示,那么后面还要至少取15*4 - 3 =57位,又因为要符合字节对齐的规则,所以要取64位,也就是取 78 00 05 5F 00 00 0F A0 00,
然后我们把它转换成二进制后,在按照15位分割
0111 1||000 0000 0000 0000 ||0101 0101 1111 000||0 0000 0000 0000 00|| 00 1111 1010 0000 0||000 0000
然后我们可以算出
Xmin = (000 0000 0000 0000)2=(0)10
Xmax = (0101 0101 1111 000)2= (11000)10
Ymin = (0 0000 0000 0000 00)2 =(0)10
Ymax = (00 1111 1010 0000 0) 2= (8000)10
你也许会产生疑问,我们明明设定的画面尺寸是550*400的啊,这里为什么算出来的是11000 * 8000的啊?!别忘了,这里算出来的数字是以twips为单位的,一般情况下,1 twip等于1/20象素。
OK,接着往后解析,接下来就是帧速和帧数了,呵呵
数据 含义
00 18 表示帧速为16+8=24帧/S
02 00 帧数为2帧(再次提醒下,这是little-endian小尾存储噢)
OK.到此SWF文件头就结束了,接下来就是一个一个的Tag了。
我们先取16位:44 11,将小尾字节顺序转换成大尾顺序,就是11 44,然后取它的高10位是(0001 0001 01)2=(69)10,取它的低6位是(00 0100)2=(4)10.根据高10位的69,查询swf文件中的tag值和action值,可以知道TagType为69的是FileAttribute Tag。低6位的值4表示这个Tag数据大小占4个字节。因此我们取出接下来的后4个字节为:00 00 00 00,不要看它仅仅是0,其实它是有意义的,我们看下FileAttributes Tag的结构说明
域 数据类型 含义
Tag头 RECORDHEADER TagType=69
Reserved UB[3] 总是0
hasMetaData UB[1] 为1表示含有MetaData标签
为0表示不含
Reserved UB[3] 总是0
UseNetWork UB[1] 如果为1,则在本地加载时该文件有网络权限。为0,则在本地加载时该文件只有本地权限。
Reserved UB[24] 总是0
这里说下FileAttributes Tag只在8及后续版本中有。
OK,Go on....
取下一个Tag,依然取2个字节43 02,转化成02 43,然后高十位=(0000 0010 01)2=(9)10,低6位=(00 0011)2=(3)10,高10位的9表明这是一个SetBackgroundColor tag,低6位的3表明数据占3个字节,OK,我们取出后续的3个字节是 FF FF FF,知道了吧,这就是我们设置的背景颜色:白色。
再取下一个Tag,3F 03,转化成03 3F,高十位=(0000 0011 00)2=(12)10,低6位=(11 1111)2=(63)10,高十位的12表示这是个DoAction标签,低6位的63表明数据长度有后续的4个字节决定,OK,我们取后续的4个字节为02 00 00 00,它表明这个Tag的数据长度占2个字节,OK,我们再取后续的2个字节是07 00,07表示Action代码,查Action代码就可以知道它表示的Action语句是ActionStop,也就是我们写在第一帧的代码AS Code
stop();,呵呵,亲切吧~。07后面的00,就表示DoAction Tag结束了。
Next Tag,FF 0A,转换成 0A FF,高十位=(0000 1010 11)2=(43)10,低6位=(11 1111)2=(63)10,高十位的43表明这是一个FrameLabel标签,也就是我们所说的帧标签。低6位的63表明数据大小由后续的4个字节指明,我们取出后续的4个字节为06 00 00 00,也就说该Tag的数据占6个字节,OK,继续取后续的6个字节,73 74 61 72 74 00,呵呵,将16进制值转换成字符串,就是"start",00,是字符串结束标志。
Next Tag ,40 00,转换成 00 40,高十位=(0000 0000 01)2=(1)10,低6位=(00 0000)2=(0)10,高十位的1表明这是一个ShowFrame Tag,也就是说当前帧的内容都已经准备好了,可以显示当前帧了。
NextTag , 3F 03,噫,很熟悉的样子,不错,前面刚刚遇到过吗,在出现AS Code
stop();的地方啊。这就是一个DoAction Tag,并且数据大小由后续4个字节表明,取后续4个字节:02 00 00 00,呵呵,跟上面的一样,接着取2个字节:05 00,05 表示的Action代码是ActionPrevFrame,也就是我们说的AS Code
prevFrame();了。00表示DoActionTag结束了。
Next Tag,FF 0A,呵呵,这也是刚刚出现的,表明这是一个FrameLabel标签,也就是我们所说的帧标签。低6位的63表明数据大小由后续的4个字节指明,我们取出后续的4个字节为04 00 00 00,也就说该Tag的数据占4个字节,OK,继续取后续的4个字节,65 6E 64 00,呵呵,将16进制值转换成字符串,就是"end",00,是字符串结束标志。
Next Tag,40 00,转换成 00 40,高十位=(0000 0000 01)2=(1)10,低6位=(00 0000)2=(0)10,高十位的1表明这是一个ShowFrame Tag,也就是说当前帧的内容都已经准备好了,可以显示当前帧了。
Next Tag 00 00,不用转换了,呵呵,高十位是0,低6位也是0,表明这是个EndTag,表示什么意义就不用我说了吧。
OK,一个简单的SWF文件就解析完了,好累啊。。擦把汗,再喝口水。。。
stop();第2帧命名为"end",动作面板里写AS Code
prevFrame();。然后发布设置里:发布成FlashPlayer8,不压缩影片。
然后保存、输出swf。用UltraEdit32打开输出的swf,看到的画面如下图所示
下面我们来分析一些这些16进制数字的意义。
对于SWF中数据格式及数据存储方式不明白,请先到swf文件格式--基本数据类型中看看。
我们先看下关于SWF文件头的官方说明
区域 数据类型 含义
标识 UI8(8位二进制无符号整数) "F"表示该文件是未压缩的
"C"表示压缩文件(SWF6及后续版本支持)
标识 UI8 总是"W"
标识 UI8 总是 "S"
版本 UI8 SWF文件版本
文件大小 UI32 文件字节大小
画面尺寸 RECT 以twips为单位
帧速 UI16 8.8形式的定点小数
总帧数 UI16 总帧数
OK了,对应着它我们来分析下刚才生成的文件
数据 含义
46 "F",表示未压缩的
57 "W"
53 "S"
08 SWF文件版本为8
4C 00 00 00 文件大小为 4*16+12=76字节
再往后就是画布尺寸了,它是一个RECT结构的数据,我们先看下RECT结构说明:
名字 类型 含义
Nbits UB[5] 表示每个数字必须的二进制位数
Xmin SB[Nbits] x最小值
Xmax SB[Nbits] x最大值
Ymin SB[Nbits] Y最小值
Ymax SB[Nbits] Y最大值
我们生成的这个SWF文件中的数据是78 00 ...,我们先取前5位二进制,先确定好数据位数。78的二进制形式是:0111 1000,取前5位就是0111 1,它表示的十进制数是15=8+4+2+1,也就是说,Xmin,Xmax,Ymin,Ymax都要15位二进制数来表示,那么后面还要至少取15*4 - 3 =57位,又因为要符合字节对齐的规则,所以要取64位,也就是取 78 00 05 5F 00 00 0F A0 00,
然后我们把它转换成二进制后,在按照15位分割
0111 1||000 0000 0000 0000 ||0101 0101 1111 000||0 0000 0000 0000 00|| 00 1111 1010 0000 0||000 0000
然后我们可以算出
Xmin = (000 0000 0000 0000)2=(0)10
Xmax = (0101 0101 1111 000)2= (11000)10
Ymin = (0 0000 0000 0000 00)2 =(0)10
Ymax = (00 1111 1010 0000 0) 2= (8000)10
你也许会产生疑问,我们明明设定的画面尺寸是550*400的啊,这里为什么算出来的是11000 * 8000的啊?!别忘了,这里算出来的数字是以twips为单位的,一般情况下,1 twip等于1/20象素。
OK,接着往后解析,接下来就是帧速和帧数了,呵呵
数据 含义
00 18 表示帧速为16+8=24帧/S
02 00 帧数为2帧(再次提醒下,这是little-endian小尾存储噢)
OK.到此SWF文件头就结束了,接下来就是一个一个的Tag了。
我们先取16位:44 11,将小尾字节顺序转换成大尾顺序,就是11 44,然后取它的高10位是(0001 0001 01)2=(69)10,取它的低6位是(00 0100)2=(4)10.根据高10位的69,查询swf文件中的tag值和action值,可以知道TagType为69的是FileAttribute Tag。低6位的值4表示这个Tag数据大小占4个字节。因此我们取出接下来的后4个字节为:00 00 00 00,不要看它仅仅是0,其实它是有意义的,我们看下FileAttributes Tag的结构说明
域 数据类型 含义
Tag头 RECORDHEADER TagType=69
Reserved UB[3] 总是0
hasMetaData UB[1] 为1表示含有MetaData标签
为0表示不含
Reserved UB[3] 总是0
UseNetWork UB[1] 如果为1,则在本地加载时该文件有网络权限。为0,则在本地加载时该文件只有本地权限。
Reserved UB[24] 总是0
这里说下FileAttributes Tag只在8及后续版本中有。
OK,Go on....
取下一个Tag,依然取2个字节43 02,转化成02 43,然后高十位=(0000 0010 01)2=(9)10,低6位=(00 0011)2=(3)10,高10位的9表明这是一个SetBackgroundColor tag,低6位的3表明数据占3个字节,OK,我们取出后续的3个字节是 FF FF FF,知道了吧,这就是我们设置的背景颜色:白色。
再取下一个Tag,3F 03,转化成03 3F,高十位=(0000 0011 00)2=(12)10,低6位=(11 1111)2=(63)10,高十位的12表示这是个DoAction标签,低6位的63表明数据长度有后续的4个字节决定,OK,我们取后续的4个字节为02 00 00 00,它表明这个Tag的数据长度占2个字节,OK,我们再取后续的2个字节是07 00,07表示Action代码,查Action代码就可以知道它表示的Action语句是ActionStop,也就是我们写在第一帧的代码AS Code
stop();,呵呵,亲切吧~。07后面的00,就表示DoAction Tag结束了。
Next Tag,FF 0A,转换成 0A FF,高十位=(0000 1010 11)2=(43)10,低6位=(11 1111)2=(63)10,高十位的43表明这是一个FrameLabel标签,也就是我们所说的帧标签。低6位的63表明数据大小由后续的4个字节指明,我们取出后续的4个字节为06 00 00 00,也就说该Tag的数据占6个字节,OK,继续取后续的6个字节,73 74 61 72 74 00,呵呵,将16进制值转换成字符串,就是"start",00,是字符串结束标志。
Next Tag ,40 00,转换成 00 40,高十位=(0000 0000 01)2=(1)10,低6位=(00 0000)2=(0)10,高十位的1表明这是一个ShowFrame Tag,也就是说当前帧的内容都已经准备好了,可以显示当前帧了。
NextTag , 3F 03,噫,很熟悉的样子,不错,前面刚刚遇到过吗,在出现AS Code
stop();的地方啊。这就是一个DoAction Tag,并且数据大小由后续4个字节表明,取后续4个字节:02 00 00 00,呵呵,跟上面的一样,接着取2个字节:05 00,05 表示的Action代码是ActionPrevFrame,也就是我们说的AS Code
prevFrame();了。00表示DoActionTag结束了。
Next Tag,FF 0A,呵呵,这也是刚刚出现的,表明这是一个FrameLabel标签,也就是我们所说的帧标签。低6位的63表明数据大小由后续的4个字节指明,我们取出后续的4个字节为04 00 00 00,也就说该Tag的数据占4个字节,OK,继续取后续的4个字节,65 6E 64 00,呵呵,将16进制值转换成字符串,就是"end",00,是字符串结束标志。
Next Tag,40 00,转换成 00 40,高十位=(0000 0000 01)2=(1)10,低6位=(00 0000)2=(0)10,高十位的1表明这是一个ShowFrame Tag,也就是说当前帧的内容都已经准备好了,可以显示当前帧了。
Next Tag 00 00,不用转换了,呵呵,高十位是0,低6位也是0,表明这是个EndTag,表示什么意义就不用我说了吧。
OK,一个简单的SWF文件就解析完了,好累啊。。擦把汗,再喝口水。。。
发表评论
-
swf文件压缩
2011-12-01 18:29 1347from http://www.9ria.com/news/2 ... -
swf文件的数据结构以及转为exe或从exe中剥离出swf的代码
2011-11-14 22:11 2122swf文件的数据结构以及转为exe或从exe中剥离出swf的源 ... -
swf的详细介绍
2011-11-14 21:17 1235介绍链接一 http://as3.iteye.com/blog ... -
三个重要的处理swf的开源软件
2011-11-14 18:33 1318抓紧时间研究jswiff,swfmill,swfml jsw ... -
IText中文处理问题!!!
2011-11-08 16:19 1167引用2008年06月05日 星期四 下午 10:29这里说的I ... -
FlexBook
2011-05-06 13:12 1559FlexBook from [url ... -
[2011-04] Flex里自定义进度条ProgressBar样式皮肤
2011-04-20 15:47 26332011-01-29 11:08trackbar是整个的条 ... -
[2011-04] flex弹出模式窗口
2011-04-19 17:25 16231、创建一个component,继承自 TitleWindow ... -
[2011-04] Flex调用C# Webservice
2011-04-19 14:19 1151关键字: flex数据交互 终于试出flex用WebSer ... -
[2011-04-19]Flex程序实现背景贴图的两种方式
2011-04-19 10:33 1272Flex程序实现背景贴图的两种方式 Two ways to i ... -
Flex Component Kit for Flash CS3 安装方法及前提
2011-04-15 10:22 1290from http://kingapex.iteye.com/ ... -
as3 flash web 应用 (6)swfobject的使用:将flash嵌入页面
2011-04-14 10:27 2455from http://hi.baidu.com/yukon_ ... -
pdftk 为偶数页加水印
2011-03-23 17:27 2252引用查看完整版本 : 找 ... -
借助 unoconv 批量转 xls 到 pdf文件
2011-03-23 14:44 3322文章分类:Web前端 因为 ... -
swftools安装
2011-03-09 08:44 1465安装swftools工具时,在windows平台下是很简单的事 ... -
flex3下使用全屏模式
2011-03-03 10:12 989引用flex3下使用全屏模式 MXML: -------- ... -
Flex生成SDK下Local目录下的语言包
2011-02-25 16:44 1658from http://sensaran.wordpress. ... -
swf文件格式解析入门(tag解析)
2011-02-24 15:24 2849收藏 swf文件格式解析入门(tag解析) 2010 ... -
转成swf文件注意事项
2011-02-21 10:23 8911\ 这里同时给大家提供一个建议就是,对于纯位图的资源文 ... -
AS获取SWF文件的宽和高!(实现如下类)
2011-02-17 17:57 1440主页博客相册|个人档案 ...
相关推荐
【标题】"动网转贴.e.rar"是一个压缩文件,很可能包含了有关动网论坛或社区的相关资源、数据或用户帖子的备份。动网是中国早期知名的网络论坛软件之一,提供了丰富的社区功能,允许用户发帖、回帖、互动等。这个...
转贴一个网络设计的例子
【标题】"论坛转贴 v1.0 JS版-源码.zip" 提供的是一个基于JavaScript的论坛转贴功能的源代码实现。JS版通常指的是使用JavaScript编程语言编写的版本,这表明该软件可能主要用于网页端,利用浏览器的JavaScript引擎...
Struts-menu是一个基于Apache Struts框架的菜单管理组件,它为Web应用提供了动态生成和管理菜单的功能。在分析Struts-menu的源码时,我们可以深入理解Struts框架的工作原理、MVC模式的应用以及如何实现自定义标签库...
综上所述,"易语言动网转贴"源码涵盖了文件操作、窗口交互、数据校验等多个方面,是实现论坛帖子迁移的一个实例,对于理解和学习易语言以及窗口编程有很大的帮助。通过深入研究这段代码,开发者可以了解到如何利用...
* 拟阵是指一个数组的子集,其中每个元素都是该数组的一个元素。拟阵 M 中极大独立子集有哪些特点是指该子集中的元素互不相同且它们的结合是该数组中的最大子集。 * NP 完全语言和 NP 完全语言类是指那些在多项式...
这是一个类似论坛转贴工具的小程序,可以将剪贴板中的HTML代码转换为论坛支持的UBB代码。 由于现在流行的转贴工具都是基于浏览器的,转换速度比较慢,还得打开浏览器才能使用(同时受到浏览器版本限制)。 <br...
由于压缩包文件名为“易语言动网转贴.rar”,我们可以推测这可能是一个软件开发资源,包含了一些源代码、教程或者是相关插件。 在易语言中,"动网"通常指的是动网论坛,这是一个曾经非常流行的网络社区平台。"转贴...
U-Boot(Universal Boot Loader)是一个开放源代码的引导加载程序项目,支持多种处理器架构(如ARM、PowerPC等)和操作系统(如Linux、NetBSD等)。它具有强大的功能集,例如支持网络启动、闪存操作以及通过串行...
标题中的“动易系统的论坛转贴工具 -ASP源码.zip”揭示了这是一个基于ASP(Active Server Pages)编程语言开发的论坛转贴工具的源代码。ASP是微软公司推出的一种服务器端脚本环境,用于创建动态交互式网页。这个工具...
对于易语言的学习者来说,这是一个宝贵的实践案例,可以帮助他们提升编程技能,并了解实际项目中的问题解决策略。同时,对于任何想要了解论坛数据迁移的开发者来说,这也是一个值得参考的资源。
当用户将带有原网址的帖子分享到其他论坛,就相当于为原网站创建了一个自然的外部链接,即反向链接。搜索引擎会将这些反向链接视为对原网站质量的认可,从而提高其在搜索结果中的排名。因此,动易系统的论坛转贴工具...
在描述中提到,“在windows下的grep命令,查找文本的好工具,方便shell人员”,这暗示了grep对于经常在命令行环境中工作的人来说是一个非常实用的工具,可以帮助他们快速定位和分析大量文本数据。 在Windows环境下...
在网页开发中,jQuery是一个非常流行的JavaScript库,它极大地简化了DOM操作、事件处理和Ajax交互等任务。在本主题中,我们将深入探讨如何利用jQuery实现“转贴”功能,这是一种常见的社交媒体分享功能,允许用户将...
标题"行业资料-电子功用-全自动导电布成型转贴穿管设备及工艺的介绍分析.rar"表明这是一份关于电子行业中的特定应用——全自动导电布成型转贴穿管设备及其相关工艺的详细介绍。导电布是一种具有导电性能的材料,常...
由于文件名仅有一个".swf"文件,我们可以推测这是一个Flash动画或互动教程,通常用于视觉展示和交互式学习。 在SAP的第二章中,可能涵盖了以下几个关键知识点: 1. **SAP模块介绍**:SAP系统由多个模块组成,如...
在“导电泡棉转贴装置”这个特定的场景下,我们可能是在讨论一种用于电子政务设备或系统中的特殊组件。 导电泡棉是一种具有导电性能的泡沫材料,通常用于电子设备的屏蔽、接地或防静电保护。在电子政务设备中,这种...
去除Html中的干扰码等(样例中以轻之国度的干扰码为例) 配置文件语法: 方法类型(整数) 最大匹配长度(整数) 字符串1(删除开头) 字符串2(删除结尾) 方法类型: 1:删除单行 2:删除行与行之间的