将数据从JavaScript发送到C++;,大于127的字节值替换为;替换字符“; 我试图通过JoOMQ(C++和NPM ZrOMQ)将JavaScript应用程序的缓冲区数据发送给C++应用程序。如果缓冲区包含大于127的字节,则数据字节将替换为3个字节:

将数据从JavaScript发送到C++;,大于127的字节值替换为;替换字符“; 我试图通过JoOMQ(C++和NPM ZrOMQ)将JavaScript应用程序的缓冲区数据发送给C++应用程序。如果缓冲区包含大于127的字节,则数据字节将替换为3个字节:,javascript,c++,node.js,utf-8,zeromq,Javascript,C++,Node.js,Utf 8,Zeromq,\xEF\xBF\xBD 研究表明,这是Unicode替换字符的UTF-8值(U+FFFD) 这在Javascript中的任何地方都不发生,在调用ZrOMQ 发送函数之前,数据已经被损坏了,我可以通过CeloMQ ReV调用在C++端接收它。p> 我尝试将JavaScript端的缓冲区类型更改为UintArray类型,以查看是否有任何更改,但没有成功。我不知道还能尝试什么 在不使用npmzeromq源文件的情况下,是否有任何方法可以解决此问题(我不确定如何或是否愿意) 更新*消息生成代码示例*

\xEF\xBF\xBD

研究表明,这是Unicode替换字符的UTF-8值(
U+FFFD

这在Javascript中的任何地方都不发生,在调用ZrOMQ <代码>发送<代码>函数之前,数据已经被损坏了,我可以通过CeloMQ<代码> ReV调用在C++端接收它。p> 我尝试将JavaScript端的缓冲区类型更改为UintArray类型,以查看是否有任何更改,但没有成功。我不知道还能尝试什么

在不使用
npmzeromq
源文件的情况下,是否有任何方法可以解决此问题(我不确定如何或是否愿意)

更新*消息生成代码示例*

var data = new ProtoData.Data1();
data.setTemp(128); // type is int32
var payload = data.serializeBinary();
var size = payload.length + 4; // 16 bits
var head1 = 4; // 8 bits
var head2 = 4; // 8 bits
var payload_buf = Buffer.from(payload);
// create the header
var header = Buffer.allocUnsafe(4);
header.writeUInt16LE(size, 0);
header.writeUInt8(head1, 2);
header.writeUInt8(head2, 3);
var msg = Buffer.concat([header, payload_buf]);
zmqPubSock.sock.send(msg);

我想你的诊断是正确的。它看起来像是一个带有zeromq.js的消息传递库,正确地说,它是一个不执行二进制操作的消息传递库

《问题记者》建议改用zeromq ng


另一种选择是使用Base64

看起来您正在使用JavaScript文本函数和数据类型处理二进制数据。请显示您的代码。@Tom Blodgey完成!谢谢你,汤姆!我会研究其他的选择