2016-09-06 13 views
0

Ich habe das folgende Batch-Skript, das eine Zahl basierend auf ein paar Dinge berechnet, es ist eine ziemlich große Zahl jedoch, Dies ist, was es erzeugen sollte (Beispiel) 76561197960287930 nicht mehr und nicht weniger.ungültige Nummer. Zahlen sind auf 32 Bits der Genauigkeit beschränkt

@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 

Gibt es einen fix und oder Abhilfe? Dank

+2

Aus der Set/A-Dokumentation: Die Zahlen müssen alle innerhalb des Bereichs von 32 Bit vorzeichenbehafteten Ganzzahlen (-2.147.483.648 bis 2.147.483.647) liegen, um größere Zahlen mit PowerShell oder VBScript verarbeiten zu können. – FloatingKiwi

Antwort

1

Die maximale positive Zahl, die in „32 Bit Genauigkeit“ verwaltet werden kann, ist 2147483647 (via set /A 0x7FFFFFFF erhalten), wenn Sie also Operationen mit mehr Stellen durchführen möchten, nur um die maximale Anzahl von Stellen in Stücke geteilt der entsprechenden Größe entsprechend der gewünschten Operation. Wenn Sie beispielsweise Multiplikationen durchführen möchten, teilen Sie die große Zahl in Gruppen von 4 Ziffern auf (da 9999x9999 in 32-Bit passt, 99999x99999 nicht). Sie können eine weitere Beschreibung dieser Methode unter this answer überprüfen.

Allerdings ist dieses Problem sehr einfach: Sie wollen einfach nur eine große (17-stellig) Nummer zu einem anderen hinzuzufügen, so kann das Ergebnis in nur zwei Teilen 9 Ziffern jeweils erhalten:

@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% 

Diese Methode liefert richtige Ergebnisse mit SID-Nummern bis 999999999.

+0

Danke, werde das versuchen! – marceltje

Verwandte Themen