Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在nodejs中将无符号int打包为二进制字符串?_Javascript_Node.js_Pack - Fatal编程技术网

Javascript 如何在nodejs中将无符号int打包为二进制字符串?

Javascript 如何在nodejs中将无符号int打包为二进制字符串?,javascript,node.js,pack,Javascript,Node.js,Pack,我想知道是否有人能帮助我。我是nodejs新手,我一直在尝试使用nodejs作为客户端向服务器发送消息。服务器是用C编写的,在PHP安装中,它使用pack'N',len将字符串的长度发送到服务器。我曾尝试在javascript中实现类似的东西,但遇到了一些问题。我想知道你是否能指出我哪里出错了,从我复制打包字符串代码的地方到phpjs 我的客户端nodejs javascript代码是: var net = require('net'); var strs = Array("&l

我想知道是否有人能帮助我。我是nodejs新手,我一直在尝试使用nodejs作为客户端向服务器发送消息。服务器是用C编写的,在PHP安装中,它使用pack'N',len将字符串的长度发送到服务器。我曾尝试在javascript中实现类似的东西,但遇到了一些问题。我想知道你是否能指出我哪里出错了,从我复制打包字符串代码的地方到phpjs

我的客户端nodejs javascript代码是:

   var net = require('net');
     var strs = Array("<test1>1</test1>",` 
        "<test_2>A STRING</test_2>", "<test_3>0</test_3>", 
        "<test_4></test_4>", "<test_5></test_5>",
        "<test_6></test_6>", "<test_7_></test_7>",
        "<test_8></test_8>", "<test_9>10</test_9>",
        "<test_10></test_10>", "<test_11></test11>",
        "<test_12></test_12>", "<test_13></test_13>",
        "<test_14></test_14>");

        hmsg = strs[0] + strs[1] + strs[2] + strs[3] + strs[4] + strs[5] + strs[6];
        console.log(hmsg.length);
        msg =  hmsg + "<test_20></test_20>"`

     msglen = hmsg.length;
     astr = '';
     astr += String.fromCharCode((msglen >>> 24) && 0xFF);
     astr += String.fromCharCode((msglen >>> 16) && 0xFF);
     astr += String.fromCharCode((msglen >>> 8) & 0xFF);
     astr += String.fromCharCode((msglen >>> 0) & 0xFF);
     var pmsg = astr + msg;
     console.log(pmsg);
     var client = net.createConnection({host: 'localhost', port: 1250});
     console.log("client connected");
     client.write(pmsg);
     client.end();

也就是说,头消息的长度只需要使用缓冲区的writeUInt32即可。我在这里发帖,希望它能帮助其他人。

我看到你自己设法让它工作,但是为了更简单的修复,你可以使用二进制模块


使用npm安装二进制文件安装

谢谢!我也会试试这个。
console.log(hmsg.length, msg.length);
var msglen = hmsg.length;
var buf = new Buffer(msg.length+4);
mslen = buf.writeUInt32BE(msglen, 0);
mslen = buf.write(msg, 4);

var client = net.createConnection({host: 'localhost', port: 8190});
console.log("client connected");
client.write(buf);
client.end();