Как передать двоичные данные из 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 так же, как rahul.jpg в c ++? Какой Nan :: New () мы должны использовать для передачи двоичных данных без изменений? Пожалуйста помоги. Благодарю.

0

Решение

Попробуйте что-то вроде этого:

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

и кстати, fread возвращает количество байтов, прочитанных из файла, поэтому лучше сделать следующее:

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

Другие решения

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

Я использовал приведенный выше код на C ++, который решил проблему. В файле node.js использовали следующий код для записи в файл:
fs.writeFileSync('rahul2.jpg', data, 'binary');

Благодарю.

0

По вопросам рекламы [email protected]