在 C# 中将用户 Steam ID 从控制台转换为 64 位版本
Converting a users Steam ID from console to the 64bit version in C#
我正在创建一个应用程序,人们可以在其中将用户的 Steam ID 粘贴到搜索框中。在大多数情况下,它将是来自游戏控制台的 Steam ID,如下所示:STEAM_1:0:12345678
。我需要将其转换为 64 位版本,以便为该用户向 Steam API 发出请求。
这里有很多有用的信息:
https://developer.valvesoftware.com/wiki/SteamID
但我仍然不知道如何转换为 64 位。
今天是你的幸运日;我为你写了整件事。通常情况下,我们希望首先看到您在自己的实现中做出一些努力,即使它很粗糙,我们也会帮助您解决该代码的问题。
public static Int64 TranslateSteamID(string steamID)
{
Int64 result = 0;
var template = new Regex(@"STEAM_(\d):([0-1]):(\d+)");
var matches = template.Matches(steamID);
if (matches.Count <= 0) return 0;
var parts = matches[0].Groups;
if (parts.Count != 4) return 0;
Int64 x = Int64.Parse(parts[1].Value) << 24;
Int64 y = Int64.Parse(parts[2].Value);
Int64 z = Int64.Parse(parts[3].Value) << 1;
result = ((1 + (1 << 20) + x) << 32) | (y + z);
return result;
}
它至少适用于链接页面上的示例值。您可以在这里尝试:
经过进一步研究并尝试完全遵循 Steam Id documentation 这是我想出的解决方案:
STEAM_X:Y:Z
文档中的公式:W=Z*2+V+Y
以STEAM_1:1:66138017为例:
var steamId = "STEAM_1:1:66138017";
var match = Regex.Match(steamId, @"^STEAM_[0-5]:[01]:\d+$", RegexOptions.IgnoreCase);
if (!match.Success)
{
return null;
}
// Split it into 3 parts using ":"
var split = steamId.Split(":");
var v = 76561197960265728;
var y = long.Parse(split[1]);
var z = long.Parse(split[2]);
var w = (z * 2) + v + y;
return w;
V出处说明:
文档中有一个 table 列出了所有 Steam 帐户类型。最常见的帐户类型是个人。 table 显示其十六进制为 0x0110000100000000。使用 hex to decimal converter 我得到了 76561197960265728.
我正在创建一个应用程序,人们可以在其中将用户的 Steam ID 粘贴到搜索框中。在大多数情况下,它将是来自游戏控制台的 Steam ID,如下所示:STEAM_1:0:12345678
。我需要将其转换为 64 位版本,以便为该用户向 Steam API 发出请求。
这里有很多有用的信息: https://developer.valvesoftware.com/wiki/SteamID
但我仍然不知道如何转换为 64 位。
今天是你的幸运日;我为你写了整件事。通常情况下,我们希望首先看到您在自己的实现中做出一些努力,即使它很粗糙,我们也会帮助您解决该代码的问题。
public static Int64 TranslateSteamID(string steamID)
{
Int64 result = 0;
var template = new Regex(@"STEAM_(\d):([0-1]):(\d+)");
var matches = template.Matches(steamID);
if (matches.Count <= 0) return 0;
var parts = matches[0].Groups;
if (parts.Count != 4) return 0;
Int64 x = Int64.Parse(parts[1].Value) << 24;
Int64 y = Int64.Parse(parts[2].Value);
Int64 z = Int64.Parse(parts[3].Value) << 1;
result = ((1 + (1 << 20) + x) << 32) | (y + z);
return result;
}
它至少适用于链接页面上的示例值。您可以在这里尝试:
经过进一步研究并尝试完全遵循 Steam Id documentation 这是我想出的解决方案:
STEAM_X:Y:Z
文档中的公式:W=Z*2+V+Y
以STEAM_1:1:66138017为例:
var steamId = "STEAM_1:1:66138017";
var match = Regex.Match(steamId, @"^STEAM_[0-5]:[01]:\d+$", RegexOptions.IgnoreCase);
if (!match.Success)
{
return null;
}
// Split it into 3 parts using ":"
var split = steamId.Split(":");
var v = 76561197960265728;
var y = long.Parse(split[1]);
var z = long.Parse(split[2]);
var w = (z * 2) + v + y;
return w;
V出处说明:
文档中有一个 table 列出了所有 Steam 帐户类型。最常见的帐户类型是个人。 table 显示其十六进制为 0x0110000100000000。使用 hex to decimal converter 我得到了 76561197960265728.