setbit命令对key所存储的字符串值,设置指定偏移量上的比特位。
格式:
setbit key offset value
返回值: 返回指定偏移量原来存储的位。
如图11-1所示,二进制串“abc”在内存中是以011000010110001001100011来表示的,现在字符串第9比特位的值为1,如果想设置此值为0,需要经过以下步骤。
if (on & ~1) {
addReplyError(c,err);
return;
}
byte = bitoffset >> 3;//一个字节是8位,现在需要除以8,以定位到第byte个字节上
byteval = ((uint8_t*)o->ptr)[byte];//取出第byte个字节
bit = 7 - (bitoffset & 0x7); //offset对8取模
bitval = byteval & (1 << bit); //1<<bit位表示将1从低位向左移bit位,获取到第bit位
byteval &= ~(1 << bit); //1左移bit位,取反与原值相与,即将原值的低bit位赋值为0
byteval |= ((on & 0x1) << bit); //on&0x1的值为要修改后的值,左移bit位,与原值相或
((uint8_t*)o->ptr)[byte] = byteval;