<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1632085368384154" crossorigin="anonymous"></script><script src="https://autohotkey.top/gtag.js"></script></head> <body> <h1>NumPut()</h1> <p>以二进制格式把数字存储到指定地址+偏移的位置.</p> <pre class="Syntax"><span class="func">NumPut</span>(Number, VarOrAddress <span class="optional">, Offset := 0</span><span class="optional">, Type := "UPtr"</span>)</pre> <h2 id="Parameters">参数</h2> <dl> <dt>Number</dt> <dd><p>要保存的数字.</p></dd> <dt>VarOrAddress</dt> <dd> <p>内存地址或变量. 如果 <em>VarOrAddress</em> 是一个变量(如 <code>MyVar</code>), 则使用变量字符串的缓冲地址. 这等同于传递 <code>&amp;MyVar</code>. 然而, 省略 "&amp;" 可以得到更好的执行效果并能确保目标地址+偏移是<a href="VarSetCapacity.htm">有效的</a>.</p> <p>如果变量 <em>包含</em> 目标地址时, <strong>不要传递一个变量引用</strong>; 在这种情况下, 传递一个类似 <code>MyVar+0</code> 的表达式.</p> </dd> <dt>Offset</dt> <dd><p>偏移(单位为字节), 添加到 <em>VarOrAddress</em> 以确定目标地址.</p></dd> <dt>Type</dt> <dd> <p>如果为空或省略, 则默认为 UPtr. 否则, 指定 UInt, UInt64, Int, Int64, Short, UShort, Char, UChar, Double, Float, Ptr 或 UPtr.</p> <p><span class="ver">[v1.0.48+]</span> 支持 UInt64, 它允许将大的无符号值作为字符串传递. 在早期版本和所有其他整数类型中, 或者在传递纯整数时, 有符号与无符号并不影响结果, 因为使用了二进制的补码来表示有符号整数.</p> <p>与 DllCall() 不同的是, 作为原义字符串使用时必须括在引号中.</p> <p>更多细节请参阅 <a href="DllCall.htm#types">DllCall 类型</a>.</p> </dd> </dl> <h2 id="Return_Value">返回值</h2> <p>如果目标地址无效, 则返回空字符串. 然而, 某些无效地址这里无法检测出来并可能导致不可预知的行为.</p> <p>其他情况下则返回刚写入项右边的地址. 常用于写入不同类型的一序列数字, 例如在 DllCall() 中使用的结构.</p> <h2 id="General_Remarks">一般说明</h2> <p>如果整数太大而无法用指定的 <em>Type</em> 存储, 那么它的高位会被忽略; 例如. <code>NumPut(257, var, 0, "Char")</code> 将存储数字 1.</p> <p>如果只使用了三个参数, 则第三个参数可以为 <em>Offset</em> 或 <em>Type</em>. 例如, <code>NumPut(x, var, "int")</code> 是有效的.</p> <h2 id="Related">相关</h2> <p><a href="NumGet.htm">NumGet()</a>, <a href="DllCall.htm">DllCall()</a>, <a href="VarSetCapacity.htm">VarSetCapacity()</a></p> <a href="https://dftg.net">dftg</a></body> </html>