# Transform

执行各种数学计算, 按位运算以及类似 ASCII/Unicode 转换的任务.

过时的: 不推荐在新脚本中使用此命令. 有关替代详情, 请参阅下面的子命令部分.

    Transform, OutputVar, SubCommand, Value1 , Value2

OutputVar 参数是用来保存结果的变量的名称. SubCommand, Value1 和 Value2 参数相互依赖, 它们的用法描述如下.

## 子命令

对于 SubCommand, 指定以下命令之一:

- Unicode(仅适用于 ANSI 构建): 获取或保存剪贴板上的 Unicode 文本.
- Deref: 展开变量引用和包含在其他变量中的转义序列.
- HTML: 将指定的字符串转换为其 HTML 等效文本.
- Asc: 检索指定字符串中第一个字符的字符码.
- Chr: 检索字符码对应的单个字符.
- Mod: 检索除法的余数.
- Exp: 检索 e 的 N 次幂.
- Sqrt: 检索一个数字的平方根.
- Log: 检索一个数字的对数(以 10 为底).
- Ln: 检索一个数字的自然对数(以 e 为底).
- Round: 检索一个数字四舍五入到小数点后 N 位.
- Ceil: 检索一个数字向上到最近的整数.
- Floor: 检索一个数字向下到最近的整数.
- Abs: 检索一个数字的绝对值.
- Sin: 检索一个数字的三角正弦.
- Cos: 一个数字的三角余弦.
- Tan: 一个数字的三角正切.
- ASin: 以弧度为单位检索反正弦值.
- ACos: 以弧度为单位检索反余弦.
- ATan: 以弧度为单位检索反正切值.
- Pow: 检索底数的指数幂.
- BitNot: 检索一个数字按位取反后的结果.
- BitAnd: 检索指定数字按位与运算后的结果.
- BitOr: 检索指定数字按位或的结果.
- BitXOr: 检索指定数字按位异或的结果.
- BitShiftLeft: 检索将数字向左移动 N 位的结果.
- BitShiftRight: 检索将数字向右移动 N 位的结果.

### Unicode

过时的: 不推荐在新脚本中使用. 使用 Unicode 版本的 AutoHotkey 代替.

获取或保存剪贴板上的 Unicode 文本(仅适用于 ANSI 构建).

    Transform, OutputVar, Unicode , String

注: 使用 ClipboardAll 的方法可以保存和恢复整个剪贴板的内容, 这样可以在不丢失剪贴板原始内容情况下使用这个子命令去操作.

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

    Transform, OutputVar, Unicode  ; 获取剪贴板中的 Unicode 文本为 UTF-8 字符串.
    Transform, Clipboard, Unicode, %MyUTF_String%  ; 把 Unicode 文本放到剪贴板中.

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

使用热键(例如下面这个) 来得到与指定的 Unicode 字符串相应的 UTF-8 字符串:

    ^!u::  ; Control+Alt+U 热键.
    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

注: `Send {U+nnnn}` 命令是生成 Unicode 字符的一种备用方法.

### Deref

过时的: 不推荐在新脚本中使用. 使用表达式语法自定义函数如 Deref() 代替.

展开变量引用和包含在其他变量中的转义序列.

    Transform, OutputVar, Deref, String

任何糟糕格式的变量引用在展开时会被忽略. 如果将 OutputVar 展开为它自身, 情况也是如此; 换句话说, 在 String 变量中任何对 OutputVar 的引用在展开时会被忽略(但请注意 String 本身可以是 `%OutputVar%`). 在函数内, String 中的每个变量总是被解析为局部变量, 只有在变量不存在时, 它才会解析为全局变量(如果全局变量也没有则为空).

在下面的例子中, 如果 Var1 包含字符串 "test" 而 Var2 包含原义的字符串 "%Var1%", OutputVar 会被赋值为字符串 "test".

    Var1 := "test"
    Var2 := "%Var1%"
    Transform, OutputVar, Deref, %Var2%  ; OutputVar 为 test.
    Var3 := "%Var2%"
    Transform, Out, Deref, %Var3%  ; Out 为 %Var1%.
    Transform, Out, Deref, %Out%  ; Out 为 test.
    Transform, Var1, Deref, %Var2%  ;对 Var1 的引用被忽略, Var1 设为空.

### HTML

过时的: 不推荐在新脚本中使用. 使用诸如 EncodeHTML() 这样的自定义函数来代替.

通过转换字符为其 ASCII 值, 值超过 127 转换为他们的 HTML 名称, 将 String 转换为它的 HTML 等效字符(例如 `£` 变为 `&pound;`).

    Transform, OutputVar, HTML, String , Flags

此外, 这四个字符 `"&<>` 依次被转换为 `&quot;&amp;&lt;&gt;`. 最后, 每个换行符(``n`) 被转换为 `<br>`n`(即 `<br>` 后面跟着一个换行符). 忽略 Flags 参数.

Unicode 版可执行文件: 除了上述的功能外, Flags 可以是下列值. 如果省略, 则它默认为 1.

- 0: 不转换
- 1: 把某些字符转换成命名表示法. 例如, `€` 被转换成 `&euro;`
- 2: 把某些字符转换成编号表示法. 例如, `€` 被转换成 `&#8364;`
- 3(1+2): 仅影响非 ASCII 字符. 仅在命名表示法不可用的情况下才使用编号表示法. 后面的这些字符总是需要转换: `"&<>` 和 ``n`(换行符).

### Asc

过时的: 不推荐在新脚本中使用. 请使用 Asc().

检索 String 中第一个字符的字符码(一个介于 1 到 255 之间的数字, 或在 Unicode 版本中为 1 到 65535).

    Transform, OutputVar, Asc, String

如果 String 为空, 则 OutputVar 也会被置空. 例如: `Transform, OutputVar, Asc, %VarContainingString%`. 还可以使用 Ord(), 用于支持 Unicode 补充字符集.

### Chr

过时的: 不推荐在新脚本中使用. 请使用 Chr().

检索字符码 Number 对应的单个字符.

    Transform, OutputVar, Chr, Number

如果 Number 不是 1 到 255(或在 Unicode 版本中的 1 到 65535) 之间的数字, OutputVar 会被置空来表明此问题. 例如: `Transform, OutputVar, Chr, 130`. 不同于 Chr(), 这个子命令不支持 Unicode 补充字符集(字符码为 0x10000 到 0x10FFFF).

### Mod

过时的: 不推荐在新脚本中使用. 请使用 Mod().

检索 Dividend(被除数) 除以 Divisor(除数) 的余数.

    Transform, OutputVar, Mod, Dividend, Divisor

如果 Divisor 为零, OutputVar 被置空. Dividend 和 Divisor 都可以为小数. 如果 Divisor 为负数, 那么在计算中会被视为正数处理(即除数总是正的). 在下面的例子中, 结果是 2: `Transform, OutputVar, Mod, 5, 3`.

### Exp

过时的: 不推荐在新脚本中使用. 请使用 Exp().

检索 e(它的近似值为 2.71828182845905) 的 N 次幂.

    Transform, OutputVar, Exp, N

N 可以为负数也可以为小数.

### Sqrt

过时的: 不推荐在新脚本中使用. 请使用 Sqrt().

检索 Number 的平方根.

    Transform, OutputVar, Sqrt, Number

如果 Number 为负数, 则 OutputVar 会被置空.

### Log

过时的: 不推荐在新脚本中使用. 请使用 Log().

检索 Number 的对数(以 10 为底).

    Transform, OutputVar, Log, Number

如果 Number 为负数, 则 OutputVar 会被置空.

### Ln

过时的: 不推荐在新脚本中使用. 请使用 Ln().

检索 Number 的自然对数(以 e 为底).

    Transform, OutputVar, Ln, Number

如果 Number 为负数, 则 OutputVar 会被置空.

### Round

过时的: 不推荐在新脚本中使用. 请使用 Round().

检索 Number 四舍五入到第 N 个小数位.

    Transform, OutputVar, Round, Number , N

如果 N 省略, 则 OutputVar 会被设置为 Number 四舍五入后最接近的整数. 如果 N 是正数, 则 Number 将四舍五入到小数点后 N 位. 如果 N 是负数, 则 Number 四舍五入到小数点左边第 N 位. 例如, -1 表示四舍五入到个位, -2 表示四舍五入到十位, 而 -3 表示取整到百位. 注: 当小数四舍五入时, Round 子命令不会移除末尾的零. 例如, 12.333 四舍五入 1 个小数位变成 12.300000. 可以在操作之前使用类似 `SetFormat, Float, 0.1` 的命令来改变这种行为(事实上, 使用 SetFormat 后, 可能就不再需要使用 Round 子命令了).

### Ceil

过时的: 不推荐在新脚本中使用. 请使用 Ceil().

Number 向上取整.

    Transform, OutputVar, Ceil, Number

### Floor

过时的: 不推荐在新脚本中使用. 请使用 Floor().

Number 向下取整.

    Transform, OutputVar, Floor, Number

### Abs

过时的: 不推荐在新脚本中使用. 请使用 Abs().

检索 Number 的绝对值.

    Transform, OutputVar, Abs, Number

这是通过移除 Number 前面的负号(破折号)(如果有) 来计算的.

### Sin

过时的: 不推荐在新脚本中使用. 请使用 Sin().

检索 Number 的三角正弦.

    Transform, OutputVar, Sin, Number

Number 必须用弧度表示.

### Cos

过时的: 不推荐在新脚本中使用. 请使用 Cos().

检索 Number 的三角余弦.

    Transform, OutputVar, Cos, Number

Number 必须用弧度表示.

### Tan

过时的: 不推荐在新脚本中使用. 请使用 Tan().

检索 Number 的三角正切.

    Transform, OutputVar, Tan, Number

Number 必须用弧度表示.

### ASin

过时的: 不推荐在新脚本中使用. 请使用 ASin().

检索反正弦(单位: 弧度)(Number 是它的正弦, 译者注: sin(arcsin0.5)=0.5, arcsin(sin(pi/6))=pi/6).

    Transform, OutputVar, ASin, Number

如果 Number 小于 -1 或大于 1, OutputVar 会被置空.

### ACos

过时的: 不推荐在新脚本中使用. 请使用 ACos().

检索反余弦(单位: 弧度)(Number 是它的余弦).

    Transform, OutputVar, ACos, Number

如果 Number 小于 -1 或大于 1, OutputVar 会被置空.

### ATan

过时的: 不推荐在新脚本中使用. 请使用 ATan().

检索反正切(单位: 弧度)(它的正切是 Number).

    Transform, OutputVar, ATan, Number

### Pow

过时的: 不推荐在新脚本中使用. 请使用 `**` 运算符.

检索 Base(底数) 的 Exponent(指数) 次幂.

    Transform, OutputVar, Pow, Base, Exponent

Base 和 Exponent 都可以为小数. 如果 Exponent 为负数, 那么即使 Base 和 Exponent 都是整数, OutputVar 也会被格式化为浮点数. 不支持 Base 为负数且 Exponent 为小数如 1.5; 它会使得 OutputVar 被置空.

### BitNot

过时的: 不推荐在新脚本中使用. 请使用 `~` 运算符.

检索 Number 按位取反后的结果.

    Transform, OutputVar, BitNot, Number

在计算之前, 浮点值被截断为整数. 如果 Number 介于 0 和 4294967295(0xffffffff) 之间, 那么它会被视为无符号的 32 位值. 否则, 它被视为有符号的 64 位值. 后面的例子结果为 0xfffff0f0(4294963440): `Transform, OutputVar, BitNot, 0xf0f`.

### BitAnd

过时的: 不推荐在新脚本中使用. 请使用 `&` 运算符.

检索 Number1 和 Number2 按位与运算后的结果.

    Transform, OutputVar, BitAnd, Number1, Number2

在计算之前, 浮点值被截断为整数. 在下面的例子中, 结果为 0xff00(65280): `Transform, OutputVar, BitAnd, 0xff0f, 0xfff0`.

### BitOr

过时的: 不推荐在新脚本中使用. 请使用 `|` 运算符.

检索 Number1 和 Number2 按位或的结果.

    Transform, OutputVar, BitOr, Number1, Number2

在计算之前, 浮点值被截断为整数. 在下面的例子中, 结果为 0xf0f0(61680): `Transform, OutputVar, BitOr, 0xf000, 0x00f0`.

### BitXOr

过时的: 不推荐在新脚本中使用. 请使用 `^` 运算符.

检索 Number1 和 Number2 按位异或的结果.

    Transform, OutputVar, BitXOr, Number1, Number2

在计算之前, 浮点值被截断为整数. 在下面的例子中, 结果为 0xff00(65280): `Transform, OutputVar, BitXOr, 0xf00f, 0x0f0f`.

### BitShiftLeft

过时的: 不推荐在新脚本中使用. 请使用 `<<` 运算符.

检索将数字 Number 向左移动 N 位的结果.

    Transform, OutputVar, BitShiftLeft, Number, N

这相当于把数字 Number 乘以 "2 的 N 次方". 在计算之前, 浮点值被截断为整数. 在下面的例子中, 结果为 8: `Transform, OutputVar, BitShiftLeft, 1, 3`.

### BitShiftRight

过时的: 不推荐在新脚本中使用. 请使用 `>>` 运算符.

检索 Number 向右移动 N 位的结果.

    Transform, OutputVar, BitShiftRight, Number, N

这相当于将数字 Number 除以 "2 的 N 次方", 截除余数. 在计算之前, 浮点值被截断为整数. 在下面的例子中, 结果为 2: `Transform, OutputVar, BitShiftRight, 17, 3`.

### FromCodePage / ToCodePage

[AHK_L 54+]: 已移除. 请使用 StrPut/StrGet.

## 备注

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

如果其中一个参数是浮点数, 那么下面的子命令将检索一个浮点数, 而不是一个整数: Mod, Pow, Round 和 Abs. 检索的小数位数由 SetFormat 确定.

要将弧度转换成角度, 请将它乘以 180/pi(约为 57.29578). 要将角度转换成弧度, 请将其乘以 pi/180(约为 0.01745329252).

pi 的值(约为 3.141592653589793) 为 1 的反正切值的 4 倍.

## 相关

Math 函数, SetFormat, 表达式, 运算符, StringLower, if var is type

## 示例

检索字母 A 的 ASCII 码, 并将其存储在 OutputVar.

    Transform, OutputVar, Asc, A

dftg