# Transform

执行各种数学功能, 按位运算, 和类似 ASCII/Unicode 转换的任务.

Transform, OutputVar, Cmd, Value1 [, Value2]

#### 参数

OutputVar | 用于保存 Cmd 结果的变量名称.SetFormat 决定了整数是保存为十六进制还是十进制.
Cmd, Value1/2 | 见下表.

#### Cmd, Value1, Value2

Cmd, Value1 和 Value2 参数相互依赖, 其用法描述如下.

Unicode [, String]: 从剪贴板中获取 Unicode 文本或保存 Unicode 文本到剪贴板中. 请注意: 使用 ClipboardAll 的方法可以保存或恢复整个剪贴板的内容, 这种方法使得 "Transform Unicode" 操作时不会丢失剪贴板的原始内容.

此命令的两种操作模式举例如下:

    Transform, OutputVar, Unicode  ; Retrieves the clipboard's Unicode text as a UTF-8 string.
    Transform, Clipboard, Unicode, %MyUTF_String%  ; Places Unicode text onto the clipboard.

在上面第二个例子中, %MyUTF_String% 可以使用原义的 UTF-8 字符串代替.

使用热键确定一个给定 Unicode 字符串相应的 UTF-8 字符串, 例如:

    ^!u::  ; Control+Alt+U hotkey.
    MsgBox Copy some Unicode text onto the clipboard, then return to this window and press OK to continue.
    Transform, ClipUTF, Unicode
    Clipboard = Transform, Clipboard, Unicode, %ClipUTF%`r`n
    MsgBox The clipboard now contains the following line that you can paste into your script. When executed, this line will cause the original Unicode string you copied to be placed onto the clipboard:`n`n%Clipboard%
    return

请注意: 1) Windows 95 系统需要 Microsoft 的 Unicode 支持层 才能支持此命令 (Windows 98/Me/NT4 或更高版本系统中已经内置支持); 2) "Send {ASC nnnnn}" 命令是生成 Unicode 字符的一种可选的方法, 但其并不是在所有的应用程序中都有效.

Asc, String: 获取 String 中首个字符的 ASCII 码 (一个介于 1 和 255 之间的数字). 如果 String 为空, OutputVar 也将被置空. 例如: Transform, OutputVar, Asc, %VarContainingString%. 对应函数: Asc(String).

Chr, Value1: 获取 ASCII 码为 Value1 的单个字符. 如果 Value1 不是 1 和 255 及其之间的数字, OutputVar 将被置空来表明此问题. 例如: Transform, OutputVar, Chr, 130. 对应函数: Chr(Number).

Deref, String: 展开变量引用和包含其他变量的 转义序列. 任何糟糕格式的变量引用在展开时将被忽略. 把 OutputVar 展开为其内容也是如此; 换句话说, String's 变量中对 OutputVar 的任何引用在展开时将被忽略 (但请注意 String 自身可以 是 %OutputVar%). 在下面的例子中, 如果 var1 内容为字符串 "test" 而 var2 内容为 原义的 字符串 "%var1%", OutputVar 将被赋值为字符串 "test": Transform, OutputVar, deref, %var2%. 在 函数 内, String 中的每个变量总是解析为局部变量, 仅当局部变量不存在时才解析为全局变量 (如果没有则为空).

HTML, String: 通过把 ASCII 值大于 127 的字符译成它们的 HTML 名称来把 String 转换为其 HTML 对应字符串 (例如 ￡ becomes &pound;). 此外, 这四个字符 "&<> 依次被译成 &quot;&amp;&lt;&gt;. 最后, 每个换行符 (`n) 被译成 <br>`n (即 <br> 跟着一个换行符).

Mod, Dividend, Divisor: 获取被除数 Dividend 除以除数 Divisor 后得到的余数. 如果 Divisor 为零, OutputVar 将被置空. Dividend 和 Divisor 可以同时含有小数点. 如果 Divisor 为负数, 在计算中它将被作为正数处理. 在下面的例子中, 结果为 2: Transform, OutputVar, mod, 5, 3. 对应函数: Mod(Dividend, Divisor).

Pow, Base, Exponent: 获取底数 Base 的指数 Exponent 次幂. Base 和 Exponent 都可以含有小数点. 如果 Exponent 是负数, 即使 Base 和 Exponent 都是整数, OutputVar 也将被格式化为浮点数. 不支持负数的 Base 带有小数的 Exponent (例如 1.5)的情况; 这将使得 OutputVar 被置空. 也请参见: ** operator.

Exp, N: 获取 e (其近似值为 2.71828182845905) 的 N 次幂. N 可以为负数, 也可以含有小数点. 对应函数: Exp(N).

Sqrt, Value1: 获取 Value1 的平方根. 如果 Value1 为负数, OutputVar 将被置空. 对应函数: Sqrt(Number).

Log, Value1: 获取 Value1 的对数 (底数为 10).如果 Value1 为负数, OutputVar 将被置空.对应函数: Log(Number).

Ln, Value1: 获取 Value1 的自然对数 (底数为 e). 如果 Value1 为负数, OutputVar 将被置空.对应函数: Ln(Number).

Round, Value1 [, N]: 如果 N 省略, OutputVar 将被设置为 Value1 四舍五入后的整数. 如果 N 为正数, Value1 取 N 个小数位. 如果 N 为负数, Value1 将被四舍五入到小数点的左边 N 位. 例如, -1 取整到个位, -2 取整到十位, 而 -3 取整到百位. 请注意: 当取整小数位时不会移除末尾的零. 例如, 把 12.333 取整到十分位后成了 12.300000. 在操作前使用像 SetFormat, float, 0.1 的命令可以改变此行为 (事实上, 第一步使用 SetFormat 后可能不需要使用 Round 了). 对应函数: Round(Number [, N]).

Ceil, Value1: 获取 Value1 向上取最近的整数. 对应函数: Ceil(Number).

Floor, Value1: 获取 Value1 向下取最近的整数. 对应函数: Floor(Number).

Abs, Value1: 获取 Value1 的绝对值, 这是通过移除 Value1 前面的负号(破折号)(如果有的话)来计算的. 对应函数: Abs(Number).

Sin, Value1: 获取 Value1 的正弦三角函数值. Value1 必须用弧度表示. 对应函数: Sin(Number).

Cos, Value1: 获取 Value1 的余弦三角函数值. Value1 必须用弧度表示.对应函数: Cos(Number).

Tan, Value1: 获取 Value1 的正切三角函数值. Value1 必须用弧度表示.对应函数: Tan(Number).

ASin, Value1: 获取弧度表示的反正弦值 (此数字的正弦值为 Value1). 如果 Value1 小于 -1 或大于 1, OutputVar 将被置空. 对应函数: ASin(Number).

ACos, Value1: 获取弧度表示的反余弦值 (此数字的余弦值为 Value1). 如果 Value1 小于 -1 或大于 1, OutputVar 将被置空.对应函数: ACos(Number).

ATan, Value1: 获取弧度表示的反正切值 (此数字的正切值为 Value1). 对应函数: ATan(Number).

请注意: 下面的每个按位操作都有一个用于表达式中的更简洁的 按位操作符.

BitNot, Value1: 把 Value1按位取反后保存到 OutputVar (如果 Value1 是浮点数, 在计算前将把它截取成整数). 如果 Value1 介于 0 和 4294967295 (0xffffffff)之间, 它将被视为 无符号的 32 位值. 否则, 它被视为 有符号的 64 位值. 在下面的例子中, 结果为 0xfffff0f0 (4294963440): Transform, OutputVar, BitNot, 0xf0f

BitAnd, Value1, Value2: 获取 Value1 和 Value2 按位与运算的结果(在计算前首先将浮点数截取成整数). 在后面的例子中, 结果为 0xff00 (65280): Transform, OutputVar, BitAnd, 0xff0f, 0xfff0

BitOr, Value1, Value2: 获取 Value1 和 Value2 按位或运算的结果(在计算前首先将浮点数截取成整数). 在后面的例子中, 结果为 0xf0f0 (61680): Transform, OutputVar, BitOr, 0xf000, 0x00f0

BitXOr, Value1, Value2: 获取 Value1 和 Value2 按位异或运算的结果(在计算前首先将浮点数截取成整数). 在后面的例子中, 结果为 0xff00 (65280): Transform, OutputVar, BitXOr, 0xf00f, 0x0f0f

BitShiftLeft, Value1, Value2: 获取 Value1 往左移动 Value2 个位的结果, 这相当于 Value1 乘于 "2 的 Value2 次幂" (在计算前首先将浮点数截取成整数). 在后面的例子中, 结果为 8: Transform, OutputVar, BitShiftLeft, 1, 3

BitShiftRight, Value1, Value2: 获取 Value1 往右移动 Value2 个位的结果, 这相当于 Value1 除以 "2 的 Value2 次幂", 舍去余数 (在计算前首先将浮点数截取成整数). 在后面的例子中, 结果为 2: Transform, OutputVar, BitShiftRight, 17, 3

#### 备注

接受数值参数的子命令在它们的这些参数中也可以使用 表达式.

如果 Value1 或 Value2 是一个浮点数, 后面的 Cmd 将返回一个浮点数而不是整数: Mod, Pow, Round, 和 Abs. 返回数字的小数部分由 SetFormat 决定.

要把弧度值转换为度, 乘以 180/pi (近似值为 57.29578). 要把度值转换为弧度, 乘以 pi/180 (近似值为 0.01745329252).

pi 的值(近似为 3.141592653589793) 是 1 的反正切值的 4 倍.

#### 相关

SetFormat, Expressions, EnvMult, EnvDiv, StringLower, if var is type

#### 示例

    Transform, OutputVar, Asc, A  ; Get the ASCII code of the letter A.