gpt4 book ai didi

string - 将 Redis 输出字符串转换为位串

转载 作者:IT王子 更新时间:2023-10-29 06:10:55 27 4
gpt4 key购买 nike

127.0.0.1:6379> setbit mykey 1 1
(integer) 0
127.0.0.1:6379> setbit mykey 23 1
(integer) 0
127.0.0.1:6379> setbit mykey 345 1
(integer) 0
127.0.0.1:6379> get mykey
"@\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@"
127.0.0.1:6379>

我想解析上面的输出字符串(作为一个位串,比如“100000000011...”)来获取设置位的索引,我该怎么做?

最佳答案

你知道 setbit 只是设置一个字符串的位,所以 mykey 保存的是一个字符串。当您使用命令 get mykey 时,它只返回字符串值。

\x00 也是一个字符,你可以引用这个 ASCII TAble .

每个字符有八个位,位图只是由字符串的每个字符的所有位组成。 它的顺序是每8位的顺序就是char在string中的顺序,在这个每8位中,位的顺序是从高位到低位。例如,如果字符串为@\x00,则字符串长度为2,位长为16。@的ascii值为十进制64,并且\x00 的 ascii 为 0.

所以它的位图是:

0100 0000 0000 0000 

所以他们的偏移量是从左到右从0到15。

如果对此有疑问,可以在redis-cli中执行以下命令进行测试:

setbit test 1 1
setbit test 15 0
get test

它将是@\x00

这样位图和字符串的关系就清楚了,我们可以用字符串来得到我们想要的位图。

只需使用一个简单的 python 脚本:

s = "@\x00"
bitmap = ""
for c in s:
x = ord(c)
str = bin(x).split('b')[1]
if len(str) < 8 :
str = '0' * (8-len(str)) + str
bitmap += str
print bitmap

在这个脚本中,使用ord获取char的ascii值,使用bin将dec转为bin,长度小于8的高位加0

输出是:

0100000000000000

关于string - 将 Redis 输出字符串转换为位串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46032681/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com