私はredisを使ってビットフィールドのデータを保存していますが、オフセットごとにu4の値を設定します。
Nodejsサーバーでバッファを取得する必要があります。
0-7の場合、redisは正しいバッファを返します。
8-15の値を設定すると、奇妙なバッファが返されます.Unin8Arrayがバッファに表示され、[239,191,189]が表示され、乱雑なコードが表示されます。 ここにコピーを実行するテストコードがあります。
resoponseバッファで問題が発生しています。#0値を取得しようとしても問題ありません。なぜredisは[239、191、189]応答バッファを返しますか?
const http = require('http');
const url = require('url');
const fs = require('fs');
const redis = require('redis'),
RDS_PORT = 6379,
RDS_HOST = '139.199.33.69',//139.199.33.69
RDS_OPTS = {detect_buffers: true},
client = redis.createClient(RDS_PORT, RDS_HOST, RDS_OPTS);
console.log('redis ready')
const canvas_name = 'canvas-bitfield';
client.del(canvas_name)
client.send_command("bitfield",[canvas_name,'SET','u4','#0',10,'OVERFLOW','FAIL'])
client.send_command('bitfield',[canvas_name,'GET','u4',0],redis.print) //reply:10
client.get(canvas_name,function(err, reply){
if(err){console.log(err)}
const buff = Buffer.from(reply.toString());
const view8 = new Uint8Array(buff);
console.log(view8) //Uint8Array(3) [239, 191, 189]
})
これは無関係ですが、とにかくそれを指摘します:send_commandは*非同期*です。したがって、send_commandが真に終了した後に、後続のコマンドが実行されるようにcallbackパラメータを使用する必要があります。 'client.send_command(command、args、callback)' –