我已经得到了以下批处理脚本,它根据一些事情来计算一个数字,但它是一个相当大的数字,这是它应该生成的(例子)76561197960287930并不是更多。
@echo off
if NOT %1a == a goto recurse
reg query HKCU\Software\Valve\Steam\Users > users.tmp
echo.
echo
for /f "skip=1 delims=\ tokens=6" %%i in (users.tmp) do call %0 %%i
del users.tmp
echo
pause>nul
goto end
:recurse
set SID=%1
set /A SID=SID/2
set /A SID1=SID*2
set STEAMBIT=0
if NOT %SID1% == %1 set STEAMBIT=1
echo UserID: %SID%
echo %SID% > userid.txt
SET /A Result = ( %SID% * 2 ) + ( %STEAMBIT% + 76561197960265728 )
echo %result% > useridresult.txt
goto end
:end
exit
是否有修复或解决方法?感谢
答案 0 :(得分:2)
可以在“32位精度”中管理的最大正数字是2147483647(通过set /A 0x7FFFFFFF
获得),因此如果要执行更多数字的操作,只需拆分与所需操作相对应的适当大小的块的最大位数。例如,如果要执行乘法运算,则将大数字拆分为4位数组(因为9999x9999适合32位,但99999x99999不适合)。您可以在this answer处查看此方法的进一步说明。
然而,这个问题很简单:你只想在另一个上加一个大的(17位)数字,所以每个9位数的两个部分都可以得到结果:
@echo off
setlocal
set SID=%1
set /A "STEAMBIT=SID&1, SID=SID/2"
echo UserID: %SID% SteamBit: %STEAMBIT%
SET /A Low = ( %SID% * 2 ) + ( %STEAMBIT% + 960265728 ), High = Low / 1000000000 + 76561197
echo Result: %High%%Low:~-9%
此方法可提供SID编号最高为999999999
的正确结果。