2011-04-27 203 views
2


在java和c#之间有base64的问题我将java编码的字符串发送到一个来自java urlconnection的asp.net处理程序,我将两个字符串进行比较,并在asp.net中收到的第一次解码和两者是相同的,但解码后,在C#中的字节数组不等于从Java中的字节数组。 我使用新的sun.misc.BASE64Encoder()。encode(javabytearray);在java和System.Convert.FromBase64String(encodedstring);在dotnet中。 “[0] [-24] [56] [1] [-56] [41] [-29] .........”
to dotnet:“[0 ] [232] [56] [1] [200] [41] [227] .........”

类似:Encoding base64 in Java and decoding in C#
我不能要求它在上面的问题,因为它是一个Q &一个网站,每次必须创建一个新问题,都不能在另一个问题中提出问题。
非常感谢在Java中编码base64和在C#中解码

+1

似乎在-128..0范围内的字节在c#中被转换为256 + b。某处丢失标志。 – 2011-04-27 13:44:42

回答

8

byte在C#中未签名并且已在Java中签名。 Java byte-24的位模式等于c#byte232的位模式。所以你的代码应该是正确的。如果您想验证这一点,请转换Java byte的值为int,并将256添加为负值。

+0

要扩展Aasmund的答案,您只需将FromBase64String的结果转换为无符号字节[]。你也可以编写你自己的方法,给你一个无符号的字节结果。 – 2011-04-27 13:43:48

+0

@Ramhound:好的一点,除了我想它必须以其他方式完成(因为C#字节已经是无符号的) - 'byte []'可以转换为'sbyte []'。 – 2011-04-27 13:50:30

+0

嗨。
非常感谢您如此快速的回答。 – hee 2011-04-27 14:44:49