Передача массива ByteBuffer из Java / Kotlin в C ++ / V8 приводит к неверным данным

Я пытаюсь пройти byte[] данные из Kotlin в C ++ для передачи в JavaScript через V8 ArrayBuffer.

В Котлине:

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],

Я глубоко в кроличьей норе, над моей головой!

0

Решение

Задача ещё не решена.

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

Других решений пока нет …

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