簡體   English   中英

從字節數組轉換為字符串時的結果奇怪

[英]Strange results when converting from byte array to string

將字節數組轉換為字符串,然后將字符串轉換回字節數組時,得到奇怪的結果。

嘗試這個:

     byte[] b = new byte[1];
    b[0] = 172;
    string s = Encoding.ASCII.GetString(b);

    byte[] b2 = Encoding.ASCII.GetBytes(s);
    MessageBox.Show(b2[0].ToString());

結果對我來說不是172,而是63。

為什么會發生?

為什么會發生?

因為ASCII僅包含最多127個值。

當遇到對於給定編碼無效的二進制數據時, Encoding.GetString可以提供替換字符或引發異常。 在這里,它使用的替換字符是?

目前尚不清楚您要實現的目標,但是:

  • 如果要將任意二進制數據轉換為文本,請改用Convert.ToBase64String ; 不要嘗試使用的編碼,因為你沒有真正代表文本。 您可以使用Convert.FromBase64String進行解碼。
  • Encoding.ASCII通常是一個錯誤的選擇,當然包括172字節的二進制數據不是 ASCII文本
  • 您需要確定您實際使用的編碼。 就我個人而言,我不喜歡使用Encoding.Default除非您真的知道數據是所使用平台的默認編碼。 如果可以的話,使用UTF-8是一個不錯的選擇。

ASCII編碼是7位編碼。 如果查看生成的字符串,它包含“?” -無法識別的角色。 您可以選擇Encoding.Default。

ASCII是七位字符編碼,因此172不在該范圍內,因此在轉換為字符串時,它將轉換為“?” 用於無法表示的字符。

暫無
暫無

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

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