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  }