无法将缓冲区转换为字符串

时间:2018-05-06 05:36:02

标签: javascript node.js string buffer

function parseMessage (buff){
    let obs = [];

    let done = false;
    let offset = 0;
    let size_bytes = 4;
    while(!done){
        let message_size = buff.readUIntBE(offset, size_bytes);
        let message = buff.readUIntBE(size_bytes+offset,Number(message_size));
        console.log(buff,message.toString());
        offset = size_bytes+offset+message_size;
        try {
            let o = JSON.parse(message.toString());
            if (o && typeof o === "object") {
                obs.push(o);
            }
        }
        catch (e) {console.log(e);console.log(message.toString());}
        if(offset >= buff.length){
            done = true;
        }
    }

    return obs;
};


let buff = new Buffer("\0\0\0\02ab");
parseMessage(buff);

输出<Buffer 00 00 00 02 61 62> '24930'而不是<Buffer 00 00 00 02 61 62> 'ab'

2前置ab描述了长度。这是因为缓冲区将与套接字一起使用。

如果我这样做:

message.toString(16)

我能够获得ascii代码6162,但它们仍然不是字符。

0 个答案:

没有答案