我正在尝试使用 node-gyp 库将二进制文件的内容从 C++ 传递到 Node 。我有一个使用 .fit 格式创建二进制文件的过程,我需要将文件的内容传递给 js 来处理它。因此,我的第一个方法是将文件的内容提取到一个字符串中,然后尝试像这样将其传递给 Node 。
char c;
std::string content="";
while (file.get(c)){
content+=c;
}
我正在使用以下代码将其传递给 Node
v8::Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(args.GetIsolate(), (void*)content.data(), content.size());
args.GetReturnValue().Set(ab);
在 Node a 中获取一个 arrayBuffer,但是当我将内容打印到文件时,它与显示 c++ cout 的文件不同。
如何才能成功传递二进制数据?
谢谢。
最佳答案
最好的方法可能是将数据写入二进制磁盘文件。用C++写入磁盘;在 NodeJS 中从磁盘读取。
非常重要的是,确保指定BINARY MODE。
例如:
myFile.open ("data2.bin", ios::out | ios::binary);
不要使用“字符串”(至少不要,除非你想 uuencode)。使用缓冲区。这是一个很好的例子:
How to read binary files byte by byte in Node.js
var fs = require('fs');
fs.open('file.txt', 'r', function(status, fd) {
if (status) {
console.log(status.message);
return;
}
var buffer = new Buffer(100);
fs.read(fd, buffer, 0, 100, 0, function(err, num) {
...
});
});
您可能还会发现这些链接有帮助:
https://nodejs.org/api/buffer.html <= 有特定 Node API 的好例子
http://blog.paracode.com/2013/04/24/parsing-binary-data-with-node-dot-js/ <= 对您可能面临的一些问题进行很好的讨论,包括“字节顺序”和“解释数字”
附录:
OP 澄清说他正在考虑使用 C++ 作为 NodeJS 附加组件(而不是独立的 C++ 程序。
因此,使用缓冲区绝对是一种选择。这是一个很好的教程:
https://community.risingstack.com/using-buffers-node-js-c-plus-plus/
如果您选择走这条路,我肯定会先下载示例代码并使用它,然后再在您自己的应用程序中实现缓冲区。
关于c++ - 将二进制字符串/文件内容从 c++ 传递到 Node js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45849078/