//clear and set
client.del('my_bitfield',redis.print)
client.send_command("bitfield",['my_bitfield','SET','u4','#0',parseInt('0111',2)],redis.print)
//get
client.get('my_bitfield',function(err, reply){
console.log(reply) // p
})
想用redis的bitfield存储4位二进制的值,例如存储0111
但是用get命令取回来数据后,打印出一个字符串p,字符串转二进制显示 p代表01110000
为什么get到的数据会比我set的多了一些0000呢?
测试2
client.send_command("bitfield",['my_bitfield','SET','u4','#0',parseInt('0111',2)],redis.print)
client.send_command("bitfield",['my_bitfield','SET','u4','#1',parseInt('0111',2)],redis.print)
这次我存了两个offeset,打印出的结果是w 对应01110111 又变正常了。。
请问这是什么问题?
正确的存储方式是什么。。。
//测试文件
const redis = require('redis'),
RDS_PORT = 6379,
RDS_HOST = '139.199.33.69',
RDS_OPTS = {},
client = redis.createClient(RDS_PORT, RDS_HOST, RDS_OPTS);
console.log('redis ready')
client.del('my_bitfield',redis.print)
client.send_command("bitfield",['my_bitfield','SET','u4','#0',parseInt('0111',2)],redis.print)
client.send_command("bitfield",['my_bitfield','SET','u4','#1',parseInt('0111',2)],redis.print)
client.get('my_bitfield',function(err, reply){
if(err) {
console.log(err)
}
console.log(typeof reply)
console.log(reply)
console.log(reply.length)
})
如果需要测试代码可以用上面的 redis服务器是放在腾讯云上的
你存一个值,分配1byte(8bit),只用了1byte的高位的4bit,低位的4bit已经分配,无值,所以是0.


图里的70 也就是01110000
你直接get得到是字符串,本来存的是二进制,可以改转化为buffer,在nodejs里的ioredis有方法的,getBuffer,然后新建一个Uint8Array()保存,具体看下面图: