Обновленный
Лучший способ в настоящее время является использование помощника Nan::TypedArrayContents
.
assert(args[i]->IsFloat32Array());
Local<Float32Array> myarr = args[i].As<Float32Array>();
Nan::TypedArrayContents<float32_t> dest(myarr);
// Now use dest, e.g. (*dest)[0]
Там хороший пример этого в node-canvas.
Оригинал ответа, который показывает, почему помощник полезно
v8 API быстро сейчас меняется так это зависит от версии узла/io.js. Для того, чтобы получить доступ к данным из массива, представленной в качестве аргумента, это должно работать для узла 0.12 через io.js < 3,0:
assert(args[i]->IsFloat32Array()); // These type-check methods are available.
Local<Float32Array> myarr = args[i].As<Float32Array>();
void* dataPtr = myarr->GetIndexedPropertiesExternalArrayData();
В io.js> = 3.0 (v8 4.3) следует использовать вместо этого ArrayBuffer::GetContents
. (Я еще не использовал это и обновит его, когда выпустят 3.0). Документы: here.
В узле 0.10 TypedArrays были заварены в домашних условиях. Это был один из способов сделать это:
Local<Object> buffer = args[i]->Get(NanNew("buffer"))->ToObject();
void* dataPtr = buffer->GetPointerFromInternalField(0);
Построение массива набранное можно сделать с помощью:
Float32Array::New(ArrayBuffer::New(Isolate::GetCurrent(), size * 4), 0, size);
я основывал мою попытку до сих пор на: http://nodejs.org/api/addons .html. 'void ReadTypedArray (const FunctionCallbackInfo & args) { cout <<" args.length "<< (args.Length()); } 'И мне не удается форматировать комментарий в stackoverflow, потому что когда я нажимаю return, он сохраняет комментарий. –
user1315172
Раньше я читал буферы узлов как массивы символов, используя 'unsigned char * jpeg_input_buffer = (unsigned char *) Buffer :: Data (arg0);' – user1315172
вы используете узел или чистый v8? – vkurchatkin