我在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()来传递不受影响的二进制数据?请帮忙。感谢。
答案 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');
感谢。