fix key hash problem

v4
suxb201 2 years ago
parent 7453e4fb07
commit e844a39e0f
  1. 2
      internal/commands/keys.go
  2. 7
      internal/utils/crc16.go
  3. 10
      internal/utils/crc_test.go

@ -106,7 +106,7 @@ func CalcSlots(keys []string) []int {
if len(hashtag) > 0 {
key = hashtag
}
slots[inx] = int(utils.Crc16(key) & 0x3fff)
slots[inx] = int(utils.KeyHash(key) & 0x3fff)
}
return slots
}

@ -81,8 +81,13 @@ var crc16tab = [256]uint16{
func Crc16(buf string) uint16 {
var crc uint16
for _, n := range buf {
bytesBuf := []byte(buf)
for _, n := range bytesBuf {
crc = (crc << uint16(8)) ^ crc16tab[((crc>>uint16(8))^uint16(n))&0x00FF]
}
return crc
}
func KeyHash(buf string) uint16 {
return Crc16(buf) & 0x3FFF
}

@ -0,0 +1,10 @@
package utils
import "testing"
func TestCrc16(t *testing.T) {
ret := KeyHash("你")
if ret != 8522 {
t.Errorf("KeyHash failed, expect: %d, actual: %d", 8522, ret)
}
}
Loading…
Cancel
Save