如何在String和Byte[]對象之間進行轉換

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   os   strong   ar   

 

分析問題

  字串和位元組數組之間的轉換,事實上代表了現實世界資訊和數字世界資訊之間的轉換,要理解其中的機制,需要先瞭解一下幾個概念。

  1、位元。

  位元(bit)是指一個位,它可以說是電腦內物理儲存的最近本單元。現在的電腦體系採用二進位邏輯,即一個基本單元可以儲存兩種數值:0和1。這是因為0、1機制可以用多種物理系統來表示,例如高電平和低電平、二極體的導通和關閉、磁場的正極和負極等。總之,一個位元就是一個二進位位。

  2、位元組。

  一個位元組(byte),在C#中是由8個位元來構成的。它的值可以有一個0~255的正數表示,但在C#中不允許隱式地把一個正數變數賦值給一個位元組變數,下面的代碼將導致編譯的錯誤:

  

int i=10;int j=0;byte b=i-j;

   3、編碼。

  編碼,可說是數字資訊和現實資訊的轉行機制。一種編碼通常就定義了一種字元集合轉換的原則,常用的編碼方式包括UTF8、GB2312、UTF7、Unicode等,在UTF-8中,字元採用1~6個8位元位元組的序列進行編碼。僅僅8位元位元組的序列中,位元組的高位為0,其他的7位用於字元值編碼。n(n>1)個8位元位元組的一個序列中,初始的8位元位元組中高n位為1,接著一位為0,此位元組餘下的位包含被編碼字元值的位。接著的所有8位元位元組的最高位為1,接著下一位為0,餘下的每個位元組6位包含被編碼字元的位。

  展示了位元、位元組、編碼和字串的關係。

  

  根據定義,位元組數組和字串的轉換必然涉及使用某種編碼方法。不同的編碼方式將導致不同的轉換結果。在C#中,使用System.Text.Encoding來管理常用的編碼。以下代碼展示了如何在位元組數組和字串之間進行轉換。

using System;using System.Text;namespace Test{    class StringByte    {        static void Main()        {            string str= "I am a string";            //A byte array into a string.            //UTF8 encoding.            byte[] utf8 = StringToByte(str, Encoding.UTF8);            //GB2312 encoding            byte[] gb2312 = StringToByte(str, Encoding.GetEncoding("GB2312"));            //Unicode encoding            byte[] unicode = StringToByte(str, Encoding.Unicode);            Console.WriteLine(utf8.Length);            Console.WriteLine(gb2312.Length);            Console.WriteLine(unicode.Length);            //Convert back to a string            Console.WriteLine(ByteToString(utf8,Encoding.UTF8));            Console.WriteLine(ByteToString(gb2312,Encoding.GetEncoding("GB2312")));            Console.WriteLine(ByteToString(unicode,Encoding.Unicode));            Console.Read();        }        //Convert a string to a byte array.        static byte[] StringToByte(string str, Encoding encoding)        {            return encoding.GetBytes(str);        }        //Convert a byte array to a string        static string ByteToString(byte[] byteArray,Encoding encoding)        {            return encoding.GetString(byteArray);        }    }}

  以上程式展示了如何利用三種常見的編碼方式把字串轉換成位元組數組,接著再轉換回字串。程式中間檢查了位元組數組的長度,讀者可以看到利用不同的編碼方式產生的位元組數組是完全不同的。對於具體的編碼定義,有興趣的讀者可以參考ISO和RFC的標準文檔。下面是程式的執行結果:

    

答案

  字串和位元組數組的轉換依賴於編碼方式的使用,不同的編碼通訊協定將使用不同的演算法進行。System.Text.Encoding類型提供了大部分常見的編碼演算法支援,用以進行字串和位元組數組之間的轉換。

  

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.