Transform

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

Transform, OutputVar, Cmd, Value1 [, Value2]

参数

OutputVar

用来保存 Cmd 结果的变量名. SetFormat 决定了整数结果是保存为十六进制还是十进制.

Cmd, Value1/2

请参阅后面的列表.

Cmd, Value1, Value2

Cmd, Value1Value2 参数相互依赖, 它们的用法描述如下.

Unicode [, String](此子命令在 AutoHotkey 的 Unicode 版本中不可用)获取或保存剪贴板上的 Unicode 文本。注:使用ClipboardAll的方法可以保存和恢复整个剪贴板的内容,这样可以在不丢失剪贴板原始内容情况下用“Transform Unicode”操作剪贴板。

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

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 字符的一种备用方法。


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 变量中任何对 OutputVar 的引用在展开时会被忽略 (但请注意 String 自身可以 %OutputVar%). 在下面的例子中,如果 var1 包含字符串“test”而 var2 包含原义的字符串“%var1%”,则 OutputVar 会被赋值为字符串“test”:Transform, OutputVar, deref, %var2%。在 函数 内, String 中的每个变量总是被解析为局部变量, 只有在局部变量不存在时才解析为全局变量 (如果没有则为空).

HTML, String [, Flags]:

对于 ANSI 可执行脚本:通过把 ASCII 值大于 127 的字符译成它们的 HTML 名称来把 String 转换为与它对应的 HTML 字符串(例如把 £ 译成 &pound;)。此外, 这四个字符 "&<> 依次被译成 &quot;&amp;&lt;&gt;. 最后, 每个换行符 (`n) 被译成 <br>`n (即 <br> 后面跟着一个换行符). 忽略 Flags 参数。

在 Unicode 可执行脚本:除了上述的功能外,Flags 可以为零或下列值的组合(和)。如果省略, 则它默认为 1.

仅影响非 ASCII 字符. 如果 Flags = 3, 仅在命名表示法不可用的情况下才使用编号表示法. 后面的这些字符总是需要转换: <>"&`n (换行符).

FromCodePage / ToCodePage: 不赞成使用. 请使用 StrPut() / StrGet() 代替.

Mod, Dividend, Divisor: 获取被除数 Dividend 除以除数 Divisor 后得到的余数. 如果 Divisor 为零, 则 OutputVar 被置空. DividendDivisor 都可以为小数. 如果 Divisor 为负数, 那么在计算中会被视为正数处理. 后面的例子结果为 2:Transform, OutputVar, mod, 5, 3。对应的函数:Mod(Dividend, Divisor)

Pow, Base, Exponent: 获取底数 Base 的指数 Exponent 次幂. BaseExponent 都可以为小数. 如果 Exponent 为负数, 那么即使 BaseExponent 都是整数, OutputVar 也会被格式化为浮点数. 不支持 Base 为负数且 Exponent 为分数例如 1.5 的情况; 它会使得 OutputVar 被置空. 另请参阅: ** 运算符.

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: 获取 Value1Value2 按位与运算的结果 (在计算前首先把浮点数截取成整数). 后面的例子结果为 0xff00(65280):Transform, OutputVar, BitAnd, 0xff0f, 0xfff0

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

BitXOr, Value1, Value2: 获取 Value1Value2 按位异或运算的结果 (在计算前首先把浮点数截取成整数). 后面的例子结果为 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

备注

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

如果 Value1Value2 其中一个为浮点数,则后面的 Cmd 的结果为浮点数而不是整数:Mod, Pow, Round 和 Abs。获取结果的小数位数由 SetFormat 决定.

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

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

相关

SetFormat, 表达式, EnvMult, EnvDiv, StringLower, if var is type

示例

Transform, OutputVar, Asc, A  ; 获取字母 A 的 ASCII 码.