2016-09-06 34 views
0

我已经得到了下面的批处理脚本,它基于几件事情计算出一个数字,然而它的数字相当大,这就是它应该生成的数据(例子)76561197960287930不能少。无效号码。数字被限制在32位精度

@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 

是否有修复方法或解决方法?感谢

+2

从Set/A文档:数字必须都在32位有符号整数(-2,147,483,648至2,147,483,647)的范围内,以处理较大数字使用PowerShell或VBScript。 – FloatingKiwi

回答

1

可在“精度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

+0

谢谢,会试试这个! – marceltje

相关问题