gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/myx/scale/scale.go (about) 1 package scale 2 3 import ( 4 "math/rand" 5 "strings" 6 "time" 7 ) 8 9 // "\"转移字符,排除 10 var tenToAny = []string{ // 0-90 共91个 11 "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", // 1-10 12 "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", // 11-20 13 "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", // 21-30 14 "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", // 31-40 15 "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", // 41-50 16 "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", // 51-60 17 "y", "z", "!", "@", "#", "$", "%", "^", "&", "*", // 61-70 18 "(", ")", "-", "=", "_", "+", "[", "{", "]", "}", // 71-80 19 "|", ";", ":", "'", ",", "<", ".", ">", "/", "?", // 81-90 20 } 21 22 var allstr = "0123456789" + 23 "ABCDEFGHIJ" + 24 "KLMNOPQRST" + 25 "UVWXYZabcd" + 26 "efghijklmn" + 27 "opqrstuvwx" + 28 "yz!@#$%^&*" + 29 "()-=_+[{]}" + 30 "|;:',<.>/?" 31 32 func GetVisibleASCII() []string { 33 return tenToAny 34 } 35 36 func AsciiToIndex(char uint) uint { 37 return 0 38 } 39 40 // RandString 生成随机字符串 41 func RandString(size int, n int) string { 42 rand.NewSource(time.Now().UnixNano()) // 产生随机种子 43 var s = make([]byte, size) 44 nstr := allstr[:n] 45 for i := 0; i < size; i++ { 46 c := nstr[rand.Int63()%int64(len(nstr))] 47 s[i] = c 48 } 49 return string(s) 50 } 51 52 //var tenToAny map[int]string = map[int]string{0: "0", 1: "1", 2: "2", 3: "3", 4: "4", 5: "5", 6: "6", 7: "7", 8: "8", 9: "9", 10: "a", 11: "b", 12: "c", 13: "d", 14: "e", 15: "f", 16: "g", 17: "h", 18: "i", 19: "j", 20: "k", 21: "l", 22: "m", 23: "n", 24: "o", 25: "p", 26: "q", 27: "r", 28: "s", 29: "t", 30: "u", 31: "v", 32: "w", 33: "x", 34: "y", 35: "z", 36: ":", 37: ";", 38: "<", 39: "=", 40: ">", 41: "?", 42: "@", 43: "[", 44: "]", 45: "^", 46: "_", 47: "{", 48: "|", 49: "}", 50: "A", 51: "B", 52: "C", 53: "D", 54: "E", 55: "F", 56: "G", 57: "H", 58: "I", 59: "J", 60: "K", 61: "L", 62: "M", 63: "N", 64: "O", 65: "P", 66: "Q", 67: "R", 68: "S", 69: "T", 70: "U", 71: "V", 72: "W", 73: "X", 74: "Y", 75: "Z"} 53 54 // DecimalTo 10进制转任意进制 n 55 func DecimalTo(num, n int) string { 56 if num == 0 { 57 return "0" 58 } 59 newNumStr := "" 60 61 var remainder int 62 var remainderString string 63 64 for num != 0 { 65 remainder = num % n 66 if remainder < 0 { 67 remainder = n + remainder 68 } 69 remainderString = tenToAny[remainder] 70 newNumStr = remainderString + newNumStr 71 num = num / n 72 //fmt.Println("newNumStr>>>", newNumStr, num) 73 } 74 return newNumStr 75 } 76 77 // Findkey map根据value找key 78 func Findkey(in string) int { 79 result := -1 80 for k, v := range tenToAny { 81 if in == v { 82 result = k 83 } 84 } 85 return result 86 } 87 88 // ToDecimal 任意进制转10进制 89 //func ToDecimal(num string, n int) int { 90 // var newNum float64 91 // newNum = 0.0 92 // nNum := len(strings.Split(num, "")) - 1 93 // var cnt = 0 94 // for i := nNum; i >= 0; i-- { 95 // char := string(num[i]) 96 // 97 // tmp := float64(Findkey(char)) 98 // newNum = newNum + tmp*math.Pow(float64(n), float64(cnt)) 99 // cnt++ 100 // } 101 // return int(newNum) 102 //} 103 104 // ToDecimal n进制转化成10进制 105 func ToDecimal(num string, n int) int { 106 var newNum int 107 nNum := len(strings.Split(num, "")) - 1 108 109 var pow = 1 110 var cnt = 1 111 for i := nNum; i >= 0; i-- { 112 char := string(num[i]) 113 if cnt == 1 { 114 pow = 1 115 } else { 116 pow = pow * n 117 } 118 119 tmp := Findkey(char) 120 newNum = newNum + tmp*pow 121 cnt++ 122 } 123 return int(newNum) 124 } 125 126 func DecimalArrTo(nums []int, n int) []string { 127 var r []string 128 for _, val := range nums { 129 r = append(r, DecimalTo(val, n)) 130 } 131 return r 132 } 133 134 func ToDecimalArr(nums []string, n int) []int { 135 var r []int 136 for _, val := range nums { 137 r = append(r, ToDecimal(val, n)) 138 } 139 return r 140 }