Vous connaissez le setbit
est juste mis le bit d'une chaîne, de sorte que le mykey
tient une chaîne. Lorsque vous utilisez la commande get mykey
, il renvoie simplement la valeur de chaîne. Le \x00
est également un caractère.
Chaque caractère a huit bits, et le bitmap est simplement composé de tous les bits de chaque caractère de la chaîne. son ordre est que chaque ordre de 8 bits est l'ordre char dans la chaîne, et dans tous les 8 bits, l'ordre du bit est du bit haut au bit bas. par exemple, si la chaîne est @\x00
, alors la longueur de la chaîne est égal à 2, la longueur de bits est de 16. La valeur ASCII de @
est 64 en décimal, et le ascii de \x00
est 0.
Ainsi son bitmap est:
0100 0000 0000 0000
Donc leurs décalages vont de 0 à 15 de gauche à droite.
Si vous avez un doute à ce sujet, vous pouvez exécuter des commandes dans ce Redis-cli à tester:
setbit test 1 1
setbit test 15 0
get test
Il sera @\x00
. Donc, la relation entre le bitmap et la chaîne est claire, nous pourrions utiliser la chaîne pour obtenir le bitmap que nous voulons.
il suffit d'utiliser un simple script 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
Dans ce script, il utilise le ord
pour obtenir la valeur ascii de char, et utiliser pour bac pour convertir le rabattant pour bin et ajouter 0 à bit élevé il est plus petit que la longueur 8
la sortie est:
0100000000000000
Belle réponse - je n'ajouter que l'exemple de script est Pythonic et préciser que @ et x00 ne sont pas le même caractère (?) –