簡體   English   中英

轉換形式為Base64字符串后,android的byte []與c#Base64等價不同

[英]byte[] of android after conversion form Base64 string differs from c# Base64 equivalence

我在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#中相同的字節數組的任何建議,反之亦然。 還有為什么發生這種情況的原因? 謝謝。

這些值是相同的。 差異是有符號和無符號整數。 您可以打印十六進制值以查看。 您也應該在Android上將字節解釋為無符號整數。

經過研究,我找到了一個更好的替代方案,在此問題中並未提及。 問題是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]。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM