consensus/utils/number.go
2022-10-08 20:55:01 +02:00

65 lines
1.2 KiB
Go

package utils
import (
"encoding/hex"
"github.com/jxskiss/base62"
"strconv"
"strings"
)
var encoding = base62.NewEncoding("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")
func DecodeBinaryNumber(i string) uint64 {
if n, err := strconv.ParseUint(i, 10, 0); strings.Index(i, ".") == -1 && err == nil {
return n
}
if n, err := encoding.ParseUint([]byte(strings.ReplaceAll(i, ".", ""))); err == nil {
return n
}
return 0
}
func EncodeBinaryNumber(n uint64) string {
v1 := string(encoding.FormatUint(n))
v2 := strconv.FormatUint(n, 10)
if !strings.ContainsAny(v1, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") {
v1 = "." + v1
}
if len(v1) >= len(v2) {
return v2
}
return v1
}
func DecodeHexBinaryNumber(i string) string {
if _, err := hex.DecodeString(i); strings.Index(i, ".") == -1 && err != nil {
return i
}
if n, err := encoding.Decode([]byte(strings.ReplaceAll(i, ".", ""))); err == nil {
return hex.EncodeToString(n)
}
return ""
}
func EncodeHexBinaryNumber(v2 string) string {
b, _ := hex.DecodeString(v2)
v1 := string(encoding.Encode(b))
if !strings.ContainsAny(v1, "GHIJKLMNOPQRSTUVWXYZghijklmnopqrstuvwxyz") {
v1 = "." + v1
}
if len(v1) >= len(v2) {
return v2
}
return v1
}