c++ - 将二进制字符串/文件内容从 c++ 传递到 Node js

标签 c++ node.js binary node-gyp

我正在尝试使用 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 的文件不同。

如何才能成功传递二进制数据?

谢谢。

最佳答案

  1. 最好的方法可能是将数据写入二进制磁盘文件。用C++写入磁盘;在 NodeJS 中从磁盘读取。

  2. 非常重要的是,确保指定BINARY MODE

    例如:

    myFile.open ("data2.bin", ios::out | ios::binary);

  3. 不要使用“字符串”(至少不要,除非你想 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) {
        ...
    });
});
  1. 您可能还会发现这些链接有帮助:

附录:

  • 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/

相关文章:

node.js - Angular 7 在构建 StaticInjectorError 时

c# - 哪个是比较两位数字的最有效方法?

MySQL - 实现将字符串编码为二进制字段的函数

python - ARINC429 构词法

c++ - 如何使用 C++ 将图像文件转换为 ASCII 图像?

c++ - ffmpeg如何高效解码视频帧?

c++ - Make 使用旧的 Makefile

node.js - 在 docker 容器内调试 Angular

c++ - 我如何配置 KDevelop 在执行前构建?

javascript - 如何解码nodejs中的URL?