为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕标琳琳 2022-10-15 14:05:49
我正在创建一个应用程序,有人可以在其中将用户的 Steam ID 粘贴到搜索框中。在大多数情况下,它将是来自游戏内控制台的 Steam ID,如下所示:STEAM_1:0:12345678。我需要将其转换为 64 位版本,以便为该用户向 Steam API 发出请求。这里有很多有用的信息: https ://developer.valvesoftware.com/wiki/SteamID但我仍然无法弄清楚如何转换为 64 位。
查看完整描述

2 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

这是你的幸运日;我为你写了整件事。通常,我们希望首先在您自己的实现中看到一些努力,即使它很粗糙,我们也会帮助您解决该代码的问题。


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;

}

它至少适用于链接页面上的示例值。你可以在这里试试:


https://dotnetfiddle.net/Ejrqcw


查看完整回答
反对 回复 2022-10-15
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

经过进一步研究并尝试遵循确切的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)

{

    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。


查看完整回答
反对 回复 2022-10-15
  • 2 回答
  • 0 关注
  • 385 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号