猿问

在 C# 中将用户 Steam ID 从控制台转换为 64 位版本

我正在创建一个应用程序,有人可以在其中将用户的 Steam ID 粘贴到搜索框中。在大多数情况下,它将是来自游戏内控制台的 Steam ID,如下所示:STEAM_1:0:12345678。我需要将其转换为 64 位版本,以便为该用户向 Steam API 发出请求。

这里有很多有用的信息: https ://developer.valvesoftware.com/wiki/SteamID

但我仍然无法弄清楚如何转换为 64 位。


慕标琳琳
浏览 388回答 2
2回答

温温酱

这是你的幸运日;我为你写了整件事。通常,我们希望首先在您自己的实现中看到一些努力,即使它很粗糙,我们也会帮助您解决该代码的问题。public static Int64 TranslateSteamID(string steamID){&nbsp; &nbsp; Int64 result = 0;&nbsp; &nbsp; var template = new Regex(@"STEAM_(\d):([0-1]):(\d+)");&nbsp; &nbsp; var matches = template.Matches(steamID);&nbsp; &nbsp; if (matches.Count <= 0) return 0;&nbsp; &nbsp; var parts = matches[0].Groups;&nbsp; &nbsp; if (parts.Count != 4) return 0;&nbsp; &nbsp; Int64 x = Int64.Parse(parts[1].Value) << 24;&nbsp; &nbsp; Int64 y = Int64.Parse(parts[2].Value);&nbsp; &nbsp; Int64 z = Int64.Parse(parts[3].Value) << 1;&nbsp; &nbsp; result =&nbsp; ((1 + (1 << 20) + x) << 32) | (y + z);&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return result;}它至少适用于链接页面上的示例值。你可以在这里试试:https://dotnetfiddle.net/Ejrqcw

慕田峪7331174

经过进一步研究并尝试遵循确切的Steam Id 文档,这是我想出的解决方案: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){&nbsp; &nbsp; 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 来自哪里的解释:在文档中有一个表格列出了所有 Steam 帐户类型。最常见的帐户类型是个人。该表显示此的十六进制为 0x0110000100000000。使用十六进制到十进制转换器,我最终得到 76561197960265728。
随时随地看视频慕课网APP
我要回答