如何将二进制数据从c++传递到Node.js



我有一个二进制数据在c++变量缓冲区如下:

int len = 39767;
uint16_t * buffer = (uint16_t) malloc(len);
FILE * fp = fopen("rahul.jpg", "rb"); // size of file is 39767 byte.
fread(buffer, len, 1, fp);
fclose(fp);
fp = fopen("rahul3.jpg", "wb");
fwrite(buffer, len, 1, fp);  // Here it is written correct.
fclose(fp);

我想把这个缓冲区传递给Node.js并写入文件。我使用下面一行将其转换为Local,然后换行为Object:

Local<String> str = Nan::New(buffer).ToLocalChecked();
return scope.Escape(str);

但是,在node.js中,当我检查接收到的数据长度时,它只打印9,值似乎损坏了。

console.log(data);
console.log("len = " + data.length );
fs.writeFileSync('rahul2.jpg', data, 'binary');

这里rahul2.jpg是损坏的,只有9个字节。我们怎么能得到rahul2.jpg从node.js代码相同的rahul2.jpg在c++?我们应该使用哪个Nan::New()来不受影响地传递二进制数据?请帮助。谢谢。

试试这样:

   Local<Value> returnValue = Nan::CopyBuffer(buffer, len).ToLocalChecked();

,顺便说一下,fread返回从文件中读取的字节数,所以最好这样做:

   int truelen = fread(buffer, len, 1, fp);
   . . .
   fwrite(buffer, truelen, 1, fp);

Local<String> str = Nan::NewOneByteString((uint8_t *) buffer, len).ToLocalChecked();

我在c++中使用上述代码解决了这个问题。在node.js中使用以下代码写入文件:fs.writeFileSync('rahul2.jpg', data, 'binary');

谢谢。

相关内容

  • 没有找到相关文章

最新更新