给定一个不没有重复字符的字符串,如 [0-9,a-z]
,把一个 10 进制数字转为,该字符集的字符串。应用场合如汽车牌、顺序计数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package main
import (
"fmt"
"math"
"strings"
"time"
)
var (
num2char = "0123456789abcdefghijklmnopqrstuvwxyz" // ABCDEFGHIJKLMNOPQRSTUVWXYZ
bitLen = int64(len(num2char))
)
func main() {
fmt.Println(bitLen)
tm := time.Now().Unix()
fmt.Println(tm)
hn := NumToBHex(tm, bitLen)
fmt.Println(hn)
fmt.Println(BHex2Num(hn, bitLen))
}
// 10进制数转换 n 进制
func NumToBHex(num, n int64) string {
numStr := ""
for {
if num <= 0 {
break
}
mod := num % n
num = (num - mod) / n
numStr = string(num2char[mod]) + numStr
}
return numStr
}
// n 进制数转换 10 进制
func BHex2Num(str string, n int64) int64 {
var v float64
length := len(str)
for i := 0; i < length; i++ {
s := string(str[i])
index := strings.Index(num2char, s)
v += float64(index) * math.Pow(float64(n), float64(length-1-i))
}
return int64(v)
}
输出结果:
1
2
3
4
36
1257894000
ksx180
1257894000
10进制转36进制
可以使用内置函数
1
2
strconv.FormatInt(i int64, base int) string
strconv.ParseInt(s string, base int, bitSize int) (i int64, err error)
1
2
3
4
5
6
7
func int10to36() {
n := time.Now().Unix()
s := strconv.FormatInt(n, 36)
n2, _ := strconv.ParseInt(s, 36, 64)
// _, _ = strconv.ParseUint(s, 36, 64)
fmt.Println(n, s, n2)
}
下面是分别使用 Unix
, UnixMilli
, UnixMicro
, UnixNano
取得的10进制转为36进制的结果
1
2
3
4
1257894000 ksx180 1257894000 // Unix
1257894000000 g1v9ly80 1257894000000 // UnixMilli
1257894000000000 cdvwixqm80 1257894000000000 // UnixMicro
1257894000000000000 9k1q7i17da80 1257894000000000000// UnixNano
或者使用 https://github.com/martinlindhe/base36
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import "github.com/martinlindhe/base36"
fmt.Println(base36.Encode(5481594952936519619))
// Output: 15N9Z8L3AU4EB
fmt.Println(base36.Decode("15N9Z8L3AU4EB"))
// Output: 5481594952936519619
fmt.Println(base36.EncodeBytes([]byte{1, 2, 3, 4}))
// Output: A2F44
fmt.Println(base36.DecodeToBytes("A2F44"))
// Output: [1 2 3 4]
本文网址: https://golangnote.com/topic/313.html 转摘请注明来源