0

我在 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<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 个字节。我们如何从 node.js 代码中获取 rahul2.jpg 与 c++ 中的 rahul.jpg 相同?我们应该使用哪个 Nan::New() 来传递不受影响的二进制数据?请帮忙。谢谢。

4

2 回答 2

0

尝试这样的事情:

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

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

   int truelen = fread(buffer, len, 1, fp);
   . . .
   fwrite(buffer, truelen, 1, fp);
于 2016-06-30T17:20:20.903 回答
0

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

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

谢谢。

于 2016-07-01T06:34:10.573 回答