【发布时间】:2015-10-24 04:36:19
【问题描述】:
我正在尝试将二进制数据从 C++ 发送到 Javascript,并逐字节解释它。为此,我使用了一个简单的 TCP 服务器和来自 node.js 的 net 模块。 这是 C++ 代码:
char a[4]={128,0,0,1};
std::stringstream stream;
stream.write(a,sizeof(a));
server.send(stream);
对于 Javascript 方面:
var client = new net.Socket();
client.setEncoding('utf8');
client.setNoDelay(true);
client.connect({port:25003},handler);
client.on('data', function(data) {
var thedata=data;
console.log('Received from C++: ' + thedata.length+"bytes");
console.log('DATA: '+thedata);
for(var i=0;i<thedata.length;i++)
{
buffer1[i]=thedata.charCodeAt(i);
}
console.log(buffer1[0]);
});
代码简要说明:
C++ 通过 TCP 发送 4 个字节:128 0 0 1
Javascript 使用charCodeAt 函数将接收到的数据保存在Uint8Array 中。
所以基本上我的问题是我只能发送 0-127 之间的“数字”,因为在 javascript 中我似乎需要使用 charCodeAt 函数,这对于超过 127 的值来说很疯狂。更糟糕的是,当我尝试通过 socket.io 连接发送它,它会创建一个 16 位字符串。
如何在 Javascript 端处理字节?我的意思是,简单地将其解释为 128 0 0 1?
【问题讨论】:
-
@max 我认为 JavaScript 代码是在 Node 中运行的
-
是的,它正在 Node 中运行
-
我认为您希望完全避免调用
.setEncoding()- 您不希望Node 将字节流解释为具有任何特定编码的字符。如果你不调用它,那么你的“数据”事件将被传递给 Buffer 实例而不是字符串。
标签: javascript c++ sockets tcp