在 Go 中解压 redis 设置位字符串
Unpack redis set bit string in Go
使用 redis#Setbit
设置密钥中的位,例如:redis.Do("SETBIT", "mykey", 1, 1)
.
当我像 redis.Do("GET", "mykey")
一样使用 redis#Get
阅读它时,我得到了一个字符串。
如何解压字符串以便在 Go 中获得一部分布尔值?在 Ruby 中,您使用 String#unpack 就像 "@".unpack
和 returns ["00000010"]
redigo
中没有这样的帮手。这是我的实现:
func hasBit(n byte, pos uint) bool {
val := n & (1 << pos)
return (val > 0)
}
func getBitSet(redisResponse []byte) []bool {
bitset := make([]bool, len(redisResponse)*8)
for i := range redisResponse {
for j:=7; j>=0; j-- {
bit_n := uint(i*8+(7-j))
bitset[bit_n] = hasBit(redisResponse[i], uint(j))
}
}
return bitset
}
用法:
response, _ := redis.Bytes(r.Do("GET", "testbit2"))
for key, value := range getBitSet(response) {
fmt.Printf("Bit %v = %v \n", key, value)
}
使用 redis#Setbit
设置密钥中的位,例如:redis.Do("SETBIT", "mykey", 1, 1)
.
当我像 redis.Do("GET", "mykey")
一样使用 redis#Get
阅读它时,我得到了一个字符串。
如何解压字符串以便在 Go 中获得一部分布尔值?在 Ruby 中,您使用 String#unpack 就像 "@".unpack
和 returns ["00000010"]
redigo
中没有这样的帮手。这是我的实现:
func hasBit(n byte, pos uint) bool {
val := n & (1 << pos)
return (val > 0)
}
func getBitSet(redisResponse []byte) []bool {
bitset := make([]bool, len(redisResponse)*8)
for i := range redisResponse {
for j:=7; j>=0; j-- {
bit_n := uint(i*8+(7-j))
bitset[bit_n] = hasBit(redisResponse[i], uint(j))
}
}
return bitset
}
用法:
response, _ := redis.Bytes(r.Do("GET", "testbit2"))
for key, value := range getBitSet(response) {
fmt.Printf("Bit %v = %v \n", key, value)
}