转换后的android的byte []形式Base64字符串不同于c#Base64等价

时间:2015-02-26 12:56:57

标签: c# android string base64 byte

我在c#

中使用以下代码
var Bytes = Convert.FromBase64String(mystring);

并在byte []中得到以下值:[3,221,235,121,20,212]

但是当我在android中运行相同的转换时使用:

byte[] secretKeyByteArray=Base64.decode(mystring.getBytes("UTF-8"),Base64.DEFAULT);

我得到这些值:[3,-35,-21,121,20,-44]。 据我所知,android将大于200的字节值转换为-ve。关于如何在android中获得与c#相同的字节数组的任何建议,反之亦然。也是为什么会发生这种情况的原因?感谢。

2 个答案:

答案 0 :(得分:1)

这些值是相同的。差别是有符号和无符号整数。您可以打印十六进制值来查看。您也应该在Android上将字节解释为无符号整数。

答案 1 :(得分:0)

经过研究后,我找到了一个更好的替代方案,在这个问题的背景下没有提到。问题是android中的字节的范围是-128到127,而c#中的字节的范围是0-255。因此,它们的范围不相等。简而言之,android实际上将任何高于127的值转换为其等效的有符号值,从而导致差异。因为我的问题,我想要一个解决方案,在两种情况下提供类似的输出,所以为了我的目的,我在c#中使用了下面的代码:

 var Bytes= Convert.FromBase64String(mystring);

            sbyte[] secSbytes = Array.ConvertAll(Bytes, b => (sbyte)b);

c#中的 sbyte 等同于java的字节,因为它的范围是-128到127.这解决了我的问题。通过使用这段代码,我得到了android和java的[3,-35,-21,121,20,-44]。