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  }