我有一个二进制数据在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');
谢谢。