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

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。
- 2 回答
- 0 關注
- 384 瀏覽
添加回答
舉報