2011-04-27 206 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