为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中解压 redis 设置位串

在 Go 中解压 redis 设置位串

Go
繁星点点滴滴 2021-10-04 18:15:42
使用redis#Setbit像一键设置位:redis.Do("SETBIT", "mykey", 1, 1)。当我使用redis#Getlike阅读它时redis.Do("GET", "mykey"),我得到了一个字符串。如何解压缩字符串以便在 Go 中获得一片布尔值?在 Ruby 中,你使用String#unpack就像"@".unpack它返回["00000010"]
查看完整描述

1 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

中没有这样的帮手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)

    }


查看完整回答
反对 回复 2021-10-04
  • 1 回答
  • 0 关注
  • 218 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信