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()
}
- 编辑: 添加了反转功能
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()
}
- 编辑: 添加了反转功能