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

时间:2016-06-30 16:41:57

标签: c++ node.js node.js-addon node.js-nan

我在c ++变量缓冲区中有二进制数据,如下所示:

self.menu_btn =  ttk.Menubutton (self.topframe, text="•••", bg= "gray")

我想将此缓冲区传递给Node.js并写入文件。我使用下面的行将它转换为Local然后包装到Object:

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中,当我检查接收数据的长度时,它只打印9并且值似乎已损坏。

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

这里rahul2.jpg已损坏且只有9个字节。我们如何从node.js代码中获取rahul2.jpg与c ++中的rahul.jpg相同?我们应该使用哪个Nan :: New()来传递不受影响的二进制数据?请帮忙。感谢。

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:

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

并且,顺便说一句,fread返回从文件读取的字节数,因此最好按以下方式执行:

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

答案 1 :(得分:0)

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

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

感谢。