簡體   English   中英

使用JNI從Java到本機(C ++)代碼使用byte []

[英]Using byte[] from Java to native (C++) code using JNI

我正在用Java開發Android,並用C ++編寫了一些本機部分(外部庫)。

我想將字節[]從托管(Java)應用程序傳遞到本機(C ++)庫:

// Declaration for the native method in Java
private native void someMethod(byte[] data);

在本機方面,我想使用字節數組作為另一個提供的本機函數的參數。

我已經讀過有關將數組數據轉換(復制)為兼容類型( GetByteArrayElements )的JNI方法,但是這給我留下了jbyte *類型,與我正在使用的庫不兼容(該庫定義了它自己的nByte類型,即無符號字符)。

在這種情況下最好的選擇是什么?

我應該堅持使用JNI描述的方法,並將jbyte數組類型轉換為適當的nByte數組嗎? 還有其他選擇嗎?

我應該堅持使用JNI描述的方法,並將jbyte數組類型轉換為適當的nByte數組嗎?

是的,因為jbytenByte是不同的類型,所以這似乎是不觸發未定義行為的唯一可靠方法。 在實踐中,極有可能是大小nByte是相同的jbyte ,所以你可以用重新演繹的指針獲得通過jbyte*nByte* ,但是這不是一個便攜式解決方案。

故事將有所不同,如果你的庫了int8_t<cstdint>那么你就能夠重新詮釋的指針jbyte為指針int8_t沒有負面影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM