golang数字字符串多进制转换工具插件库basexx的使用
golang数字字符串多进制转换工具插件库basexx的使用
Basexx是一个用于在不同进制之间转换数字字符串的Go语言包。
使用示例
将数字编码为指定进制的字符串
var sb strings.Builder
if err := basexx.EncodeInt64(&sb, 412, basexx.Base30); err != nil {
// 处理错误
}
result := sb.String() // 将数字412编码为Base30字符串
将指定进制的字符串解码为数字
result, err := basexx.DecodeString("fr", basexx.Base30) // 将Base30字符串"fr"解码为数字
if err != nil {
// 处理错误
}
在不同进制之间转换字符串
result, err := basexx.Convert(x, from, to) // 将字符串x从from进制转换为to进制
if err != nil {
// 处理错误
}
自定义新的数字进制
// ReverseBase10使用从'9'到'0'的数字,只是为了演示
type ReverseBase10 struct{}
func (ReverseBase10) N() int64 { return 10 }
func (ReverseBase10) Digit(val int64) (byte, error) {
if val < 0 || val > 9 {
return 0, errors.New("digit value out of range")
}
return byte('9' - val), nil
}
func (ReverseBase10) Val(digit byte) (int64, error) {
if digit < '0' || digit > '9' {
return 0, errors.New("invalid encoded digit")
}
return int64(9 - (digit - '0')), nil
}
完整示例
package main
import (
"fmt"
"strings"
"github.com/bobg/basexx/v2"
)
func main() {
// 示例1:将数字编码为Base30字符串
var sb strings.Builder
if err := basexx.EncodeInt64(&sb, 412, basexx.Base30); err != nil {
fmt.Println("编码错误:", err)
return
}
encoded := sb.String()
fmt.Println("412 in Base30:", encoded) // 输出: fr
// 示例2:将Base30字符串解码为数字
decoded, err := basexx.DecodeString("fr", basexx.Base30)
if err != nil {
fmt.Println("解码错误:", err)
return
}
fmt.Println("fr in decimal:", decoded) // 输出: 412
// 示例3:在不同进制之间转换
// 将Base30的"fr"转换为Base16
converted, err := basexx.Convert("fr", basexx.Base30, basexx.Base16)
if err != nil {
fmt.Println("转换错误:", err)
return
}
fmt.Println("fr(Base30) in Base16:", converted) // 输出: 19c
}
这个库提供了简单易用的方法来处理不同进制之间的数字字符串转换,包括预定义的常用进制和自定义新进制的功能。
更多关于golang数字字符串多进制转换工具插件库basexx的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang数字字符串多进制转换工具插件库basexx的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
basexx - Go语言多进制字符串转换工具库
basexx 是一个用于Go语言的多进制字符串转换工具库,支持2-62进制的数字字符串与各种数据类型之间的相互转换。
安装
go get github.com/songzhibin97/basexx
基本功能
1. 数字转字符串
package main
import (
"fmt"
"github.com/songzhibin97/basexx"
)
func main() {
// 十进制转二进制
fmt.Println(basexx.DecimalToBase(42, 2)) // 输出: 101010
// 十进制转十六进制
fmt.Println(basexx.DecimalToBase(255, 16)) // 输出: ff
// 十进制转62进制
fmt.Println(basexx.DecimalToBase(123456789, 62)) // 输出: 8M0kX
}
2. 字符串转数字
package main
import (
"fmt"
"github.com/songzhibin97/basexx"
)
func main() {
// 二进制转十进制
num, err := basexx.BaseToDecimal("101010", 2)
if err != nil {
panic(err)
}
fmt.Println(num) // 输出: 42
// 十六进制转十进制
num, err = basexx.BaseToDecimal("ff", 16)
if err != nil {
panic(err)
}
fmt.Println(num) // 输出: 255
// 62进制转十进制
num, err = basexx.BaseToDecimal("8M0kX", 62)
if err != nil {
panic(err)
}
fmt.Println(num) // 输出: 123456789
}
3. 进制间转换
package main
import (
"fmt"
"github.com/songzhibin97/basexx"
)
func main() {
// 二进制转十六进制
result, err := basexx.BaseToBase("101010", 2, 16)
if err != nil {
panic(err)
}
fmt.Println(result) // 输出: 2a
// 十六进制转二进制
result, err = basexx.BaseToBase("2a", 16, 2)
if err != nil {
panic(err)
}
fmt.Println(result) // 输出: 101010
}
高级功能
1. 自定义字符集
package main
import (
"fmt"
"github.com/songzhibin97/basexx"
)
func main() {
// 自定义字符集 (必须包含至少2个字符)
customCharset := "!@#$%^&*()"
// 使用自定义字符集编码
encoded := basexx.EncodeWithCharset(12345, customCharset)
fmt.Println(encoded) // 输出: &*@^%
// 使用自定义字符集解码
decoded, err := basexx.DecodeWithCharset("&*@^%", customCharset)
if err != nil {
panic(err)
}
fmt.Println(decoded) // 输出: 12345
}
2. 大数支持
package main
import (
"fmt"
"math/big"
"github.com/songzhibin97/basexx"
)
func main() {
// 创建一个大数
bigNum := new(big.Int)
bigNum.SetString("123456789012345678901234567890", 10)
// 大数转62进制
encoded := basexx.BigIntToBase(bigNum, 62)
fmt.Println(encoded) // 输出: 1L9zX6KwFOhce
// 62进制转大数
decoded, err := basexx.BaseToBigInt("1L9zX6KwFOhce", 62)
if err != nil {
panic(err)
}
fmt.Println(decoded.String()) // 输出: 123456789012345678901234567890
}
性能优化建议
- 对于频繁的转换操作,可以预先生成字符集映射
- 对于大数操作,直接使用
BigInt
相关方法 - 错误处理不要忽略,特别是用户输入的情况下
应用场景
- 短URL生成
- 数据压缩表示
- 加密算法中的编码
- 数据库ID的友好表示
basexx库提供了简单易用的API,可以方便地在不同进制之间进行转换,是处理数字字符串编码问题的好帮手。