Я пытаюсь отправить буферы данных из приложения JavaScript в приложение C ++ через ZeroMQ (C ++ и npm zeromq). Если буфер содержит байт> 127, то байт данных заменяется на 3 байта:
\xEF\xBF\xBD
Исследования показывают, что это значение UTF-8 для символа замены Unicode (U+FFFD
).
Похоже, что такого не происходит в JavaScript до вызова функции ZeroMQ send
, и данные уже повреждены, когда я могу получить их на стороне C ++ через вызов ZeroMQ recv
.
Я попытался изменить тип буфера на стороне 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);