在unsigned char数组之间转换为jbytearray和数据丢失

时间:2015-08-04 14:46:33

标签: java android java-native-interface jbytearray

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

这是我想要做的:

阶段1)

  1. 在jni中使用unsigned char data1 []到jbytearray。
  2. jbytearray到java中的byte []
  3. base 64将byte []编码为String并保存在文件中。
  4. 阶段2)

    1. 从已保存文件中加载字符串
    2. base 64 decode String to byte []
    3. byte []到jbtearray
    4. jbytearray到jni
    5. 中的unsinged char data2 []

      这是我的问题:

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

      所以,尽管unsigned char和byte之间的转换有溢出,

      阶段1)data1和phase2)data2是否正确相同而没有任何数据丢失?

      在我看来,我用

      记录了data1和data2
      __android_log_print("test", "data1 : %s", data1);
      
      __android_log_print("test", "data2 : %s", data2);
      

      他们看起来一样。

      但是,我无法理解它看起来如何(即使溢出)。

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

      离。

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

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

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

      会一样吗?

      如果这种方式错了,我该怎么办?

1 个答案:

答案 0 :(得分:0)

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

相关问题