gpt4 book ai didi

javascript - 从JavaScript向C++发送数据,超过127的字节值被替换为 "replacement character"

转载 作者:行者123 更新时间:2023-11-28 04:17:26 25 4
gpt4 key购买 nike

我正在尝试通过 ZeroMQ(C++ 和 npm zeromq)将数据缓冲区从 JavaScript 应用程序发送到 C++ 应用程序。如果缓冲区包含一个大于 127 的字节,则数据字节将替换为 3 个字节:

\xEF\xBF\xBD

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

在调用 ZeroMQ send 函数之前,这似乎在 JavaScript 中的任何地方都没有发生,并且当我可以通过 ZeroMQ recv 在 C++ 端接收数据时,数据已经损坏 调用。

我曾尝试将 JavaScript 端的缓冲区类型更改为 UintArray 类型,以查看是否有任何改变,但没有成功。我不确定还能尝试什么。

有没有办法在不使用 npm zeromq 源文件的情况下解决这个问题(我不确定该怎么做,或者我是否想这样做)。

更新*消息构建代码示例*

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);

最佳答案

我认为您做出了诊断。它看起来像一个 open issue使用 zeromq.js,这是正确的——一个不执行二进制的消息传递库!?!

问题报告者建议改用 zeromq-ng。

另一种选择是使用 Base64。

关于javascript - 从JavaScript向C++发送数据,超过127的字节值被替换为 "replacement character",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56305093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com