2012-06-22 3 views
2

Я работаю в Android jni и хочу преобразовать беззнаковый длинный длинный C-тип данных в эквивалентную оболочку JNI. Какая должна быть эквивалентная обертка jni? Также, когда я напишу вызов функции JAVA, который вызовет jni-обертку, каков должен быть dataype параметра метода JAVA для этого неподписанного длинного длинного типа данных?Преобразовать неподписанный длинный длинный эквивалент jni datatype?

ответ

1

Java не знает без знака. Все числовые примитивы Java подписаны (blame Gosling). Если вам действительно понадобится транспортировать беззнаковый 64-битный диапазон по JNI (вам нужно [0,2^64] не только [-2^63,2^63-1]), тогда нет эквивалентной Java-оболочки, и вам нужно будет разложить значение (например, четыре байта и четыре байта). В противном случае вы можете использовать простой Java-примитив long (JNI jlong), так как он 64 бит, независимо от архитектуры процессора.

+0

Мы пытаемся использовать byte [] для отправки и получения данных. Правильно ли это? – Harshad

+0

Да, вы абсолютно можете использовать jbyteArray. Однако будьте осторожны, чтобы получить правду правды. JVM является большим эндизиатом, но вы не можете принять на себя сущность базового оборудования. Хотя это будет, скорее всего, низкоорбитанец, что в равной степени неудобно. Если есть сомнения, выполните арифметическое декомпозицию (то есть деление и по модулю на 0xFF) вместо того, чтобы просто вызывать байты по адресу. –

+0

Если он ответил на ваш вопрос, подумайте о принятии и улучшении ставки. –

Смежные вопросы