javascript - 从 C++ 填充 Node v8 Float32Array

标签 javascript c++ node.js v8 node.js-addon

我查看了文档:

我正在尝试使用 thrust::host_vectofr<float> 填充 v8 float 组, 其中dataset[i].vector = thrust::host_vector<float>

使用数组,似乎四舍五入为整数:

Local<Object> obj = Object::New(isolate);
Local<Array> vec = Array::New(isolate, dataset[i].vector.size());

// populate the v8 array (copy)
for (unsigned int k = 0; k < dataset[i].vector.size(); k++)
    vec->Set(k, Number::New(isolate, dataset[i].vector[k]));

obj->Set(String::NewFromUtf8(isolate, "vector"), vec);

使用类型化数组,Float32Array :

Local<Object> obj = Object::New(isolate);
auto vec = Float32Array::New(ArrayBuffer::New(isolate, sizeof(float)), 0, dataset[i].vector.size());

// populate the v8 array (copy)
for (unsigned int k = 0; k < dataset[i].vector.size(); k++)
    vec->Set(k, Number::New(isolate, dataset[i].vector[k]));

obj->Set(String::NewFromUtf8(isolate, "vector"), vec);

编译正常,但执行时崩溃:

*** Error in `node': corrupted double-linked list: 0x000000000734bf50 ***
fish: “node run.js” terminated by signal SIGABRT (Abort)

从 C++ 分配然后填充 v8 Float32Array 以便它可以在 JavaScript 中使用的正确方法是什么?

我还了解到 Node.JS/v8 没有附带 float

最佳答案

我不确定这是什么版本的 V8(我看到的 API 文档中没有调用没有上下文的 Set),但是在 4.10 上,这工作正常:

auto arr = v8::Array::New(isolate);
(void)arr->Set(context, 0, v8::Number::New(isolate, 2.5));
auto number = arr->Get(context, 0);
printf("%s\n", *v8::String::Utf8Value(number.ToLocalChecked()));

打印出来

2.5

将其转换为浮点值也可以:

printf("%f\n", ((v8::Number*)*number.ToLocalChecked())->Value());

关于javascript - 从 C++ 填充 Node v8 Float32Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35186168/

相关文章:

javascript - React Js组件未更新

c++ - C++ 中的固体噪声生成

c++ - 背包的变体

node.js - 当我使用 sequelize cli 做所有种子时,但它返回错误 : invalid data?

node.js - NodeJS process.send 停止工作

node.js - ctags 无法识别 Node.js 和谐生成器

Javascript Slider 在过渡结束时无法正常工作

javascript - 如何缩短 JavaScript 的正则表达式?

javascript - Protractor StaleElementReferenceError : Element is no longer attached to the DOM

python - 来自 Python 的带有 Wincrypt 的 Diffie-Hellman(到 RC4)