# NumPut()

以二进制格式把数字存储到指定地址+偏移的位置.

    NumPut(Number, VarOrAddress , Offset := 0, Type := "UPtr")

## 参数

Number

  要保存的数字.

VarOrAddress

  内存地址或变量. 如果 VarOrAddress 是一个变量(如 `MyVar`), 则使用变量字符串的缓冲地址. 这等同于传递 `&MyVar`. 然而, 省略 "&" 可以得到更好的执行效果并能确保目标地址+偏移是有效的.

  如果变量 包含 目标地址时, 不要传递一个变量引用; 在这种情况下, 传递一个类似 `MyVar+0` 的表达式.

Offset

  偏移(单位为字节), 添加到 VarOrAddress 以确定目标地址.

Type

  如果为空或省略, 则默认为 UPtr. 否则, 指定 UInt, UInt64, Int, Int64, Short, UShort, Char, UChar, Double, Float, Ptr 或 UPtr.

  [v1.0.48+] 支持 UInt64, 它允许将大的无符号值作为字符串传递. 在早期版本和所有其他整数类型中, 或者在传递纯整数时, 有符号与无符号并不影响结果, 因为使用了二进制的补码来表示有符号整数.

  与 DllCall() 不同的是, 作为原义字符串使用时必须括在引号中.

  更多细节请参阅 DllCall 类型.

## 返回值

如果目标地址无效, 则返回空字符串. 然而, 某些无效地址这里无法检测出来并可能导致不可预知的行为.

其他情况下则返回刚写入项右边的地址. 常用于写入不同类型的一序列数字, 例如在 DllCall() 中使用的结构.

## 一般说明

如果整数太大而无法用指定的 Type 存储, 那么它的高位会被忽略; 例如. `NumPut(257, var, 0, "Char")` 将存储数字 1.

如果只使用了三个参数, 则第三个参数可以为 Offset 或 Type. 例如, `NumPut(x, var, "int")` 是有效的.

## 相关

NumGet(), DllCall(), VarSetCapacity()

dftg