0

いくつかの C 関数で構成される JNI ライブラリを使用しています。function1 では、次のようにサイズ 128 のバイト配列を渡します。

static byte[] byteAry = new byte[128];
long ret1 = MyLibrary.function1(byteAry);

関数 2 では、次のように、さらに処理するために function1 によって返されたバイト配列を渡します。

final int ret2 = MyLibrary.function2(byteAry);

function2 の C コードでは、次のように byteAry の長さを取得します。

jsize jsArruLen = (*env)->GetArrayLength(env,jDeviceListArr);

function1 に続いて function2 を呼び出すと、bytearray が 128 バイトとして作成されるため、jsArruLen は 128 になります。

ただし、文字列を手動で byteary にコピーし、次のようにして function2 に渡すと:

final String mystring = "this is a string";
byteAry = mystring.getBytes();

jsArruLen の長さは、mystring の長さである 16 バイトのみです。サイズを変更せずに文字列を byteAry に手動でコピーするにはどうすればよいですか?

ありがとう。

4

1 に答える 1

0

mystring.getBytes メソッドは、mystring をバイト配列にコピーするのではなく、mystring の長さの新しいバイト配列を返すことがわかりました。したがって、byteAry は mystring の長さの新しいバイト配列で上書きされます。ドー。mystring.getBytes を一時バイト配列に割り当て、一時配列の各バイト要素を for ループでバイト配列に手動で割り当てることで、これを克服しました。動作しますが、この種のコピーを行う方法があるかどうか疑問に思っていますか?

于 2013-08-29T07:05:33.990 に答える