Golang - 有一个bcadd / bcsub包吗?

时间:2016-04-02 01:57:06

标签: php go steam

golang中的包是否类似于PHP函数bcsubbcadd等?

我正在尝试将以下函数从php编写为golang。

function convertToSteamID($communityID) {
    // See if the second number in the steamid (the auth server) is 0 or 1. Odd is 1, even is 0
    $authserver = bcsub($communityID, '76561197960265728') & 1;
    // Get the third number of the steamid
    $authid = (bcsub($communityID, '76561197960265728')-$authserver)/2;
    // Concatenate the STEAM_ prefix and the first number, which is always 0, as well as colons with the other two numbers
    return "STEAM_0:$authserver:$authid";
}

1 个答案:

答案 0 :(得分:0)

您可以使用big.Int执行此操作:

var (
    magic, _ = new(big.Int).SetString("76561197960265728", 10)
    one      = big.NewInt(1)
    two      = big.NewInt(2)
)

func commIDToSteamID(ids string) string {
    id, _ := new(big.Int).SetString(ids, 10)
    id = id.Sub(id, magic)
    isServer := new(big.Int).And(id, one)
    id = id.Sub(id, isServer)
    id = id.Div(id, two)
    return "STEAM_0:" + isServer.String() + ":" + id.String()
}

func steamIDToCommID(ids string) string {
    p := strings.Split(ids, ":")
    id, _ := new(big.Int).SetString(p[2], 10)
    id = id.Mul(id, two)
    id = id.Add(id, magic)
    auth, _ := new(big.Int).SetString(p[1], 10)
    return id.Add(id, auth).String()
}

playground

  • 编辑:还添加了反向功能
相关问题