github.com/15mga/kiwi@v0.0.2-0.20240324021231-b95d5c3ac751/util/id.go (about) 1 package util 2 3 func Int64ToBytes(id int64) []byte { 4 return []byte{ 5 byte(id >> 56), 6 byte(id >> 48), 7 byte(id >> 40), 8 byte(id >> 32), 9 byte(id >> 24), 10 byte(id >> 16), 11 byte(id >> 8), 12 byte(id), 13 } 14 } 15 16 func BytesToInt64(bytes []byte) int64 { 17 return int64(bytes[0])<<56 | 18 int64(bytes[1])<<48 | 19 int64(bytes[2])<<40 | 20 int64(bytes[3])<<32 | 21 int64(bytes[4])<<24 | 22 int64(bytes[5])<<16 | 23 int64(bytes[6])<<8 | 24 int64(bytes[7]) 25 } 26 27 func Int64ToBs(id int64) string { 28 return BytesToStr(Int64ToBytes(id)) 29 } 30 31 func Int64sToShortStrSlice(ids ...int64) []string { 32 strings := make([]string, len(ids)) 33 for i, id := range ids { 34 strings[i] = Int64ToBs(id) 35 } 36 return strings 37 } 38 39 func ShortStrToInt64(id string) int64 { 40 return BytesToInt64([]byte(id)) 41 } 42 43 func Uint64ToShortStr(id uint64) string { 44 return BytesToStr([]byte{ 45 byte(id >> 56), 46 byte(id >> 48), 47 byte(id >> 40), 48 byte(id >> 32), 49 byte(id >> 24), 50 byte(id >> 16), 51 byte(id >> 8), 52 byte(id), 53 }) 54 } 55 56 func ShortStrToUint64(id string) uint64 { 57 bytes := []byte(id) 58 return uint64(bytes[0])<<56 | 59 uint64(bytes[1])<<48 | 60 uint64(bytes[2])<<40 | 61 uint64(bytes[3])<<32 | 62 uint64(bytes[4])<<24 | 63 uint64(bytes[5])<<16 | 64 uint64(bytes[6])<<8 | 65 uint64(bytes[7]) 66 } 67 68 func Uint32ToShortStr(id uint32) string { 69 return BytesToStr([]byte{ 70 byte(id >> 24), 71 byte(id >> 16), 72 byte(id >> 8), 73 byte(id), 74 }) 75 } 76 77 func ShortStrToUint32(id string) uint32 { 78 bytes := []byte(id) 79 return uint32(bytes[0])<<24 | 80 uint32(bytes[1])<<16 | 81 uint32(bytes[2])<<8 | 82 uint32(bytes[3]) 83 } 84 85 func Uint16ToShortStr(id uint16) string { 86 return BytesToStr([]byte{ 87 byte(id >> 8), 88 byte(id), 89 }) 90 } 91 92 func ShortStrToUint16(id string) uint16 { 93 bytes := []byte(id) 94 return uint16(bytes[0])<<8 | 95 uint16(bytes[1]) 96 } 97 98 func MergeUInt32(prevId, lastId uint16) uint32 { 99 return uint32(prevId)<<16 | uint32(lastId) 100 } 101 102 func SplitUInt32(code uint32) (prevId, lastId uint16) { 103 prevId = uint16(code >> 16) 104 lastId = uint16(code) 105 return 106 }