将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]
。
我深入兔子洞,在我的头上方!