【翻译】 swf_file_format_spec_v10.pdf(page 11、12、13)
=====================================================================
第一章:基础数据类型
这章描述了组成 swf 文件格式 的复合数据结构的基本数据类型。在 swf 文件中的 其他结构都是基于这种基本类型。
坐标与钢钉(钢钉:
twip
不知道怎么翻译合适,这个替代下,是长度单位)
在 swf 文件格式中都是使用整数存储 x-y 坐标的, 通常一单位的尺寸称为钢钉。在 swf 文件中, 1 个钢钉是逻辑像素的 1/20 (钢钉没有小数就意味着设置的像素最小精确到 0.05 )。在没有缩放时,一个逻辑像素等于一个屏幕像素。
例如一个方块有 800 钢钉宽, 400 钢钉高,那么渲染时对应 40x20 的逻辑像素。含有小数的像素值将会通过反走样方法取近似值。例如一个大小是 790x390 钢钉( 39.5x19.5 像素)的方块将出现一点模糊的边缘。
钢钉是大小和准确度的折中表示方法,它提供了一个为缩放大小和对象的位置比像素更小的表示单位,因此每个坐标只消耗非常少的位。
坐标使用传统的图形轴: x 是水平方向从最左端(最小)到最右端(最大)的取值, y 是垂直方向从最上端(最小)到最底端(最大)的取值。
整型和字节顺序
Swf 文件使用 8 位, 16 位, 32 位, 64 位,有符号和无符号的整型。所有的整型值在 swf 文件中使用 little-endian 的字节顺序:低字节在前高字节在后的顺序,与 Intel x86 的存储结构一样。在单个字节内的位顺序使用的是 big-endian :高位在前低位在后。
例如:
l 32 位的值 0x456e7120 存储为 20 71 6e 45 。
l 16 位的值 0xe712 存储为 12 e7 。
所有整型都是字节对齐的,因此在 swf 文件中一个整数的第一位必须存储在一个字节的第一位。
有符号整数将被传统的二补数( 二补数 (2's complement) : 是一种用二进位表示有号数的方法,也是一种将数字的正负号变号的方式,常在计算机科学中使用。一个数字的二补数就是将该数字作位元反向运算(即一补数),再将结果加 1 ,即为该数字的二补数。在二补数系统中,一个负数就是用其对应正数的二补数来表示。 )位模式表示,这是主流计算机平台的整数表示方法。在二补数系统中,负数的最高位是 1 , 0 和正数的最高位是 0 。一个负数 –n 是对一个正 - 零数 n-1 的按位取反。
整型
类型 描述
SI8 8 位有符号整数
SI16 16 位有符号整数
SI32 32 位有符号整数
SI8 [n] 8 位有符号数组, n 是数组里元素的个数
SI16 [n] 16 位有符号数组, n 是数组里元素的个数
UI8 8 位无 符号整数
UI16 16 位无符号整数
UI32 32 位无符号整数
UI8 [n] 8 位无符号数组, n 是数组里元素的个数
UI16 [n] 16 位无符号数组, n 是数组里元素的个数
UI24 [n] 24 位无符号数组, n 是数组里元素的个数
UI32 [n] 32 位无符号数组, n 是数组里元素的个数
UI64 [n] 64 位无符号数组, n 是数组里元素的个数
固定小数位数字
Swf 文件支持两种类型的固定小数位数字: 32 位和 16 位。
32 位固定小数位数字是 16.16 。就是高 16 位作为小数点前的数字,低 16 位作为小数点后的数字。 FIXED 在 swf 文件中的存储和 32 位整数一样(使用 little-endian 字节顺序)且必须字节对齐。
例如:实数 7.5 等于 0x0007.8000 。
在 swf 文件中存储格式是: 00 80 07 00 。
Swf 8 及以后版本支持 16 位有符号 固定位数字。就是高 8 位作为小数点前的数字,低 8 位作为小数点后的数字。 FIXED8 在 swf 文件中的存储和 16 位整数一样 (使用 little-endian 字节顺序 )且必须字节对齐。
固定小数位类型
类型 描述
FIXED 32 位 16.16 固定小数位数字
FIXED8 16 位 8.8 固定小数位数字
浮点数字
Swf 8
及以后版 本支持使用了
IEEE
标准
754
兼容浮点类型。共支持三种类型的浮点数。
类型 描述
FLOAT16 半精度 ( 16 位)浮点数字
FLOAT 单精度 ( 32 位) IEEE 标准 754 兼容
DOUBLE 双精度 ( 64 位) IEEE 标准 754 兼容
表格中 FLOAT16 与 FLOAT 的不同之处在于对阶数和尾数的位分配:
n 1 位符号位
n 5 位阶数位 ,和 1 个 16 的阶数偏 移
n 10 位尾数位