- 积分
- 1075
- 下载分
- 分
- 威望
- 点
- 原创币
- 点
- 下载
- 次
- 上传
- 次
- 注册时间
- 2010-10-11
- 精华
|
推荐
发表于 2014-5-24 18:01:07
|
只看该作者
来自: 北京 来自 北京
三、变量声明
模板主体的定义主要包括变量声明,类似于编程语言. 下面是变量声明的基本形式
type "title"//类型 标题
下面是类型:
int8, uint8 = byte, int16, uint16, int24, uint24, int32, uint32, int64,
uint_flex
binary,
float = single, real, double, longdouble = extended,
char, char16, string, string16,
zstring, zstring16,
boole8 = boolean, boole16, boole32hex,
DOSDateTime, FileTime, OLEDateTime, SQLDateTime, UNIXDateTime = time_t, JavaDateTime
"title"只能包含在引号中若含空字符. "title"绝不能仅由数字组成. winhex不区分大小写字符称. 最多有41字符.
在类型之前可以跟以下关键字
big-endian(高字节优先 little-endian (低字节优先)
hexadecimal(十六进制) decimal(十进制) octal(八进制)
read-only(只读) read-write(可读写)
这些修正只影响紧随其后的变量. 他们是多余的,如果他们出现在头已经定义数据类型后面的数据代表占用空间大小的位数,char16和string16是一样的,winhex支持Unicode字符和字符串. 但是, Unicode字符以外的256个第一的ANSI等价字都不支持. 最高字符串大小,可以修改用模板是8192字节.
各类串, string16 , hex需要额外参数,明确了一些内容. 这个参数可以是一个常数或一个先前宣布变数或数学表达(见下文) . 如果它是一个常数,可以指定十六进制格式, 这是公认的,如果号码是先0x .
你可以声明变量数组,把数组大小括号旁边的种类或 称号. 以下两行宣布可变大小的 ascii字符串,其长度取决于前变:
uint8 "len"
char[len] "A string"
同样的功能可以通过以下两句来定义:
byte "len"
string len "A string"
字符"~ "可以作为一个占位后更换与实际的数组元素的数目(见高级 命令) . 这并不适用于数组char变数,因为它们会自动被翻译成一个字符串. 字符串的参数,整型变量数据大小的表达式,可在指定的数学符号. 他们将处理的综合公式解析器. 这些用语须圆括号. 他们不能含有空字符. 他们可利用先前宣布整型变量的名字不包含空字符. 支持的行动,另外, ( + ) ,减法( - ) ,乘法( * ) ,整除( / ) ,取模( % ) , 位与 ( & ) , 位或 ( | ) , and 异或 ( ^ ) . 有效的数学公式所举例( 5 * 2+1 )或( len1 / ( len2 +4 ) ) . 结果总是一个整数,必须是一个正数.
zstring和zstring16都是NULL结尾的字符串,其大小取决于动态地在运行决定.
四、高级命令
当附背带,若干变量声明包含一个块,可以反复使用作为一个整体. 但是请注意,块不能嵌套在当前的执行工作. " ~ "字符可以用一个变量的名字作为占位符后更换为实际计数. 择" numbering "声明界定在哪里开始计数( 0 by default )
numbering 1
{ tab byte "len"
string len "String No. ~"
} [10]
在这个例子实际变量的名字放在模板将"String No. 1", "String No. 2", ..., "String No. 10". 而不是一个固定的重复数目 ( 10在这个例子中) ,您可能还注明是"无限" . 在这种情况下winhex将重复块到年底档案遭遇. " exitloop "可以用来走出这条回路在任何时间
" ifequal "是有用的比较两个表达式. operands可分为两个数值,是恒定值十进制,整型变量或公式, 或者字节序列作文字或hex值是比较byte字节. ascii字符串表达式必须加上引号, hex序列必须prreced了" 0x "标识. 公式须括弧.
{ r byte Value
IfEqual Value 1
ExitLoop
EndIf
} [10]
" ifequal " 以结束" endif "的声明. 如果比较表达都是相等的,模板的解释后继续" ifequal " . optionally , " ifequal "可以遵循的不等的声明. 模板处理器支进入" else "区块,如果表达不能划等号. " ifequal "命令不能嵌套. " ifgreater "类似于" ifequal " . 条件是正确的,如果第一表达的是大于二. 字符串按词典顺序进行比较.
为了便于阅读和导航模板 你可确定一组的变量,在对话框中会在不同组的变量用空间分开:
section "...Section Title..."
...variable declaractions...
endsection
"section", "endsection", 和 "numbering"关键字都没有与当前位置的解释有
关。
有两个命令也不做变量声明,但被明确用来改变目前的位置. 可以跳过无关紧要的数据(向前移动)或能取得一定的变量不止一次 由于不同类型(反向运动) . 用" move n "声明中跳过n字节,由目前的位置,其中N可说是消极的. " goto n " 到指定绝对位置,从一开始的模板解释(必须是位置) . :
int32 "Disk serial number (decimal)"
move -4
hex 4 "Disk serial number (hex)" |
|