所以我正在使用PHP来转换Steam Id,很多人可能都熟悉它。我有以下蒸汽ID:
STEAM_0:1:1514332
现在,我需要将其转换为64位版本,这也是社区ID。在浏览Steams官方发布之后:http://developer.valvesoftware.com/wiki/SteamID并且在网上查找了很多地方后,我发现以下方法适用于此:
Let X,Y, and Z be defined by the Steam ID: STEAM_X:Y:Z
SteamCommunityID = (Z*2) + 76561197960265728 + Y
所以它有效!但是,我的ACTUAL社区ID与我正在生成的社区ID之间似乎不匹配
Actual: 76561197963294393
PHP generated: 76561197963294000
当逆转方位时,为了从社区ID中获取我的蒸汽ID,我得到:1514335.5
这是一个简单的php问题示例:
//STEAM_0:1:1514332
$a = (1514332 * 2) + 76561197960265728 + 1;
echo $a; //76561197963294000
我做错了吗?
答案 0 :(得分:3)
PHP在32位二进制文件上没有64位int。它在这里使用浮点。见how to have 64 bit integer on PHP?
问题包括指向BC Math的链接,可用于解决您的问题。
答案 1 :(得分:3)
就个人而言,我使用以下代码,它可以很好地分割Steam ID并计算出64位社区ID:
$split = explode(":", $steamid); // STEAM_?:?:??????? format
$x = substr($split[0], 6, 1);
$y = $split[1];
$z = $split[2];
$w = ($z * 2) + 0x0110000100000000 + $y;
$ w将是格式正确的ID。我认为这可能有用,因为我发现这试图做同样的事情:))
答案 2 :(得分:1)
我遇到了这个问题。我在Windows上使用xampp,它使用的是32位版本的php,但我刚刚完成了一个正常工作的脚本:)它可以将64位的Steamid转换为32位,然后又乱七八糟。
<?php
//Starting 64bit steamid
$steamid = "76561198086186258";
echo "Original 64bit steamid: $steamid";
//64bit steamid to 32bit below
$authserver = bcsub($steamid, '76561197960265728') & 1;
$authid = (bcsub($steamid, '76561197960265728')-$authserver)/2;
$steamid = "STEAM_0:$authserver:$authid";
echo "<br/>32bit steamid: $steamid";
//32bit steamid to 64bit below
$id = explode(":", $steamid);
$authserver = $id[1];
$steamid64 = $id[2];
$steamid64 = $steamid64 * 2;
$steamid64 = bcadd($steamid64, 61197960265728);
if ($authserver == 1){$steamid64 = $steamid64 + 1;};
$steamid64 = "765$steamid64";
echo "<br/>new 64bit steamid: $steamid64";
?>
答案 3 :(得分:0)
您可以使用BC Math PHP扩展。这是一个片段:
//STEAM_0:1:1514332
$a = bcadd(bcadd((1514332 * 2), 76561197960265728), 1);
echo $a; //76561197963294393
答案 4 :(得分:0)
尝试在这些计算之前添加(string)
$a = (string) (1514332 * 2) + 76561197960265728 + 1;
它会一直有效;
回复:76561197963294393
答案 5 :(得分:0)
使用BCMath扩展程序,您可以执行以下操作:
bcadd(bcadd(bcmul('1514332', '2'), '76561197960265728'), 1)
这是上述等式的转换。它返回一个字符串而不是一个int,从而避免了32位int问题。
答案 6 :(得分:0)
你没有做错任何事。公式是正确的(使用计算器我得到'实际'数字)。
必须有舍入或计算问题或简单的操作系统限制。
答案 7 :(得分:0)
我知道这是一个非常古老的问题,但仍会回答(在您的特定情况下,不仅仅是如何使用64位整数)。
不要添加76561197960265728.只需将SteamID的第3部分乘以2,然后将第2部分添加到其中。然后使用网址http://steamcommunity.com/profiles/[U:1:result of the expression]
访问社区页面。在您的情况下,它将是http://steamcommunity.com/profiles/[U:1:3028665]
。
答案 8 :(得分:0)
非常古老的主题,但只是想分享我是如何解决它的,因为我有32位PHP并且不可能在我的主机上使用BCMath。 (感谢SiPlus提供解决方案)
这是一个片段:
# Convert Steam ID to Steam64 ID
$idParts = explode(':', $tradeOwnerSteamId32);
$authServer = intval($idParts[1]);
$accountNumber = intval($idParts[2]);
$tradeOwnerSteamId64 = (string) $accountNumber * 2 + $authServer;
//And using it in URL
$depositorInventory = json_decode(file_get_contents("https://steamcommunity.com/profiles/[U:1:$tradeOwnerSteamId64]/inventory/json/730/2"), true);