Golang - 有 bcadd/bcsub 包吗?

Golang - Is there a bcadd/bcsub package?

golang中有没有类似于PHP函数bcsub, bcadd等的包?

我正在尝试将以下函数从 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";
}

您可以使用 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

  • 编辑: 添加了反转功能