将ByteBuffer数组从Java / Kotlin传递到C ++ / V8会导致数据不正确

我试图从Kotlin传递byte[]数据到C ++通过V8 ArrayBuffer传递给JavaScript。

在Kotlin:

 val buffer = buffer.backingStore.asFloatBuffer() val byteBuffer = ByteBuffer.allocate(buffer.capacity() * 4) byteBuffer.asFloatBuffer().put(buffer) 

上面的工作如预期,打印正确。 该数组是[1.1, 2.2, 3.3]

所以byteBuffer.array()通过JNI传递给C ++被作为jbyteArray接收。 这里是奇怪的地方。

在C ++中,我尝试将其转换为char并将其传递给JavaScript函数引用:

 char* buffer = (char*) env->GetByteArrayElements(jbuffer, 0); Local<ArrayBuffer> arrayBuffer = v8::ArrayBuffer::New(isolate_, length); memcpy(arrayBuffer->GetContents().Data(), buffer, length); Local<Value> argv[] = { arrayBuffer }; v8::Local<v8::Context> ctx = hce->context_.Get(hce->isolate_); v8::Function *fn = *(_bufferFn->Get(isolate_)); 

在JavaScript中,我收到一个正确长度的ArrayBuffer,但是当我从它初始化一个Float32Array时,我得到[-428967904, -427919360, 4.175240064796526e-8]

我深入兔子洞,在我的头上方!