在Javascript中,如何将int值转换为特定的字节,然后与字符串组合

In Javascript, how to convert a int value to a certain bytes and then combine with a string?

本文关键字:字节 组合 字符串 然后 转换 Javascript int      更新时间:2023-09-26

使用网络的write方法时。在Node.js中,该方法只接受字符串值。

现在我有一个规则的套接字消息:4字节的消息长度+消息正文。例如,信息="你说得对",那么长度=17。

我不知道如何形成这个信息。目前我使用以下代码,但当消息长度>128时,接收套接字解析错误。

function sendMessage(data) {
    var length = data.length + 4;
    var lenArray = new Uint8Array(4);
    lenArray[0] = length >>> 24;
    lenArray[1] = length >>> 16;
    lenArray[2] = length >>> 8;
    lenArray[3] = length;
    var arrayBuffer =  new Uint8Array(length);
    arrayBuffer.set(lenArray);
    var dataArray = str2ab(data);
    arrayBuffer.set(dataArray, 16);
    var dataSend = ab2str(arrayBuffer);
    client.write(dataSend);
}
function str2ab(str) {
    var buf = new ArrayBuffer(str.length);
    var bufView = new Uint8Array(buf);
    for (var i=0, strLen=str.length; i<strLen; i++) {
        bufView[i] = str.charCodeAt(i);
    }
    return bufView;
}
function ab2str(buf) {
    return String.fromCharCode.apply(null, new Uint8Array(buf));
}

使用Node.js提供的Buffer class可以解决这个问题。

function sendBuffer(data) {
var length = Buffer.byteLength(data)+32;
var headBuf = new Buffer(4);
headBuf.writeUInt32BE(length);
var bodyBuf = new Buffer(length);
headBuf.copy(bodyBuf,0,0,headBuf.length);
bodyBuf.write(data, headBuf.length+12);
console.log(bodyBuf);
client.write(bodyBuf);}