-1

我想将 unsigned char 数组转换为 jbytearray 并将 jbytearray 转换为 unsigned char 数组。

这是我想做的事情:

阶段1)

  1. unsigned char data1[] 到 jni 中的 jbytearray。
  2. java中的jbytearray到byte []
  3. base 64 编码 byte[] 到 String 并保存在文件中。

阶段2)

  1. 从保存的文件中加载字符串
  2. base 64 解码字符串到字节[]
  3. byte[] 到 jbtearray
  4. jbytearray 到 jni 中的 unsinged char data2[]

这是我的问题:

unsigned char 的范围是 0 ~ 256
和 byte(in java) -128 ~ 127

所以,虽然 unsigned char 和 byte 之间的转换存在溢出,

phase1) data1 和 phase2) data2 是否正确且没有任何数据丢失?

在我看来,我记录了 data1 和 data2

__android_log_print("test", "data1 : %s", data1);

__android_log_print("test", "data2 : %s", data2);

他们看起来一样。

但是,我不明白它看起来如何(即使溢出)。

并假设它们是相同的,奇怪的是,在其他逻辑中有些事情进展不顺利......(Data1 用 AES 加密,我想用与 Data1 相同的方式解密 Data2)

前任。

unsigned char data1[32] = { 250, 100, 230, 120, .......};

任务阶段1)2、3和阶段2)1、2、3

unsigned char data2[32] = { 250, 100, 230, 120, .......}; 

会一样吗?

如果这种方式是错误的,我该怎么办?

4

1 回答 1

0

你不应该担心。本质上,原生数组和 jbyteArray 之间的转换可以认为是reinterpret_cast. 只要 yiu 不在 Java 和本机之间混合算术运算,你就安全了。

于 2015-11-08T21:29:39.177 回答