2 回答

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
這是你的幸運(yùn)日;我為你寫了整件事。通常,我們希望首先在您自己的實(shí)現(xiàn)中看到一些努力,即使它很粗糙,我們也會(huì)幫助您解決該代碼的問題。
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貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
經(jīng)過進(jìn)一步研究并嘗試遵循確切的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 來自哪里的解釋:
在文檔中有一個(gè)表格列出了所有 Steam 帳戶類型。最常見的帳戶類型是個(gè)人。該表顯示此的十六進(jìn)制為 0x0110000100000000。使用十六進(jìn)制到十進(jìn)制轉(zhuǎn)換器,我最終得到 76561197960265728。
- 2 回答
- 0 關(guān)注
- 380 瀏覽
添加回答
舉報(bào)