Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从Int到Byte(Java)的转换问题_Android_Arrays_Int_Byte_Rijndael - Fatal编程技术网

Android 从Int到Byte(Java)的转换问题

Android 从Int到Byte(Java)的转换问题,android,arrays,int,byte,rijndael,Android,Arrays,Int,Byte,Rijndael,我正在为Android开发一个应用程序。在此应用程序中,您必须使用Rijndael加密/解密算法 要使用此算法,我需要安装IVs。在本例中,是一个字节数组。到目前为止还不错 问题是,我必须从用C#编写的Web服务中使用相同的IVs 因此,C#是: byte[] bytIV = { 121, 241, 10, 1, 132, 74, 11, 39, 255, 91, 45, 78, 14, 211, 22, 62 }; 当我尝试在Java中执行同样的操作时,出现了一个错误,我建议添加一些数字的强

我正在为Android开发一个应用程序。在此应用程序中,您必须使用Rijndael加密/解密算法

要使用此算法,我需要安装IVs。在本例中,是一个字节数组。到目前为止还不错

问题是,我必须从用C#编写的Web服务中使用相同的IVs

因此,C#是:

byte[] bytIV = { 121, 241, 10, 1, 132, 74, 11, 39, 255, 91, 45, 78, 14, 211, 22, 62 };
当我尝试在Java中执行同样的操作时,出现了一个错误,我建议添加一些数字的强制转换。是什么使代码如此:

byte[] bytIV = { 121, (byte) 241, 10, 1, (byte) 132, 74, 11, 39, (byte) 255, 91, 45, 78, 14, (byte) 211, 22, 62 };
还是不行

有人对我的工作有什么建议吗

谢谢



在我在这里使用的示例中,我使用(cast)而不是(byte)。示例已更正。注意:我的代码中有(cast)。在代码中是(字节)。

字节是8位有符号的。您正在设置大于该值的数组值。例如241。这就是为什么需要添加强制转换,而进行简单测试的结果是:

byte b2 = (byte) 241;           
System.out.println("" + b2);
输出=-15


因此,您的问题是字节是8位有符号的,从-128到127。因此,对241进行强制转换将得到-15,这与C#中无符号字节的241位相同。我看不出有什么问题。
但是对字节的转换是使用
(byte)241
,而不是
(cast)241

在Java中,一个字节的范围可以保持在-128到127之间。任何大于128或小于-127的数字都不能放入字节,这就是它要求强制转换的原因。在Java中,添加这样的强制转换(int)或(double)将分别将数字强制转换为int或double。要解决问题,必须将数组更改为短数组或整数数组,而不是字节数组。然后删除声明中的强制转换。以下任何一项都适用于您

int[] bytIV = { 121, 241, 10, 1, 132, 74, 11, 39, 255, 
                             91, 45, 78, 14, 211, 22, 62 };


你想要得到241的值,你会得到-15。我想这就是给你带来问题的原因。对不起,我不太理解你的例子。我应该使用int数组还是short数组来代替字节数组?就是这样吗?嗨,Jason,问题是在创建这个字节数组后不久,我必须将它作为参数传递给IvParameterSpec类型的变量,该变量只接受byte[]类型的参数。您无法可靠地将大于128的数字转换为字节,这将失去准确性。数组中的数字来自哪里?是否有可能使用其他数字?首先,请接受答案或跟进您的问题。其次,IV中的值应该与C#now中的值相同,因此问题可能在别处。所以下一个问题就变成了——这是一直以来最明显的一个问题——什么是“仍然不起作用。”是什么意思?例外情况?解密错误?烧毁的CPU?飞猪?
short[] bytIV = { 121, 241, 10, 1, 132, 74, 11, 39, 255, 
                             91, 45, 78, 14, 211, 22, 62 };