我试图使用node-gyp库将二进制文件的内容从c ++传递到节点。我有一个使用.fit格式创建二进制文件的进程,我需要将文件的内容传递给js来处理它。所以,我的第一个方法是在字符串中提取文件的内容,并尝试将其传递给节点。
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);
在节点a中获取一个arrayBuffer,但是当我将内容打印到文件时,它与显示c ++ cout的内容不同。
如何成功传递二进制数据?
感谢。
答案 0 :(得分:1)
可能最好的方法是将数据写入二进制磁盘文件。用C ++写入磁盘;从NodeJS中的磁盘读取。
非常重要的是,请务必指定 BINARY MODE 。
例如:
myFile.open ("data2.bin", ios::out | ios::binary);
不要使用&#34;字符串&#34; (至少除非你想要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 &lt; =具有特定节点API的良好示例
http://blog.paracode.com/2013/04/24/parsing-binary-data-with-node-dot-js/ &lt; =很好地讨论了您可能面临的一些问题,包括&#34; endianness&#34;和#34;解释数字&#34;
附录:
OP澄清说他正在考虑将C ++用作 NodeJS Add-On (而不是一个独立的C ++程序。
因此,使用缓冲区绝对是一种选择。这是一个很好的教程:
https://community.risingstack.com/using-buffers-node-js-c-plus-plus/
如果您选择这条路线,我会在您自己的应用程序中实现缓冲区之前,明确地下载示例代码并首先使用它。
答案 1 :(得分:0)
这取决于例如使用redis
值可以是各种字符串(包括二进制数据) 实例,您可以将jpeg图像存储在值中。价值不可能 大于512 MB。
如果文件大于512MB,则可以将其存储为块。 但我不建议,因为这是一个内存数据存储
它易于在c ++和node.js中实现