異世界


2012年6月22日 星期五

String 和 byte[] 轉換

 

String 類型轉成 byte[]:

   1: byte [] byteArray  =  System.Text.Encoding.Default.GetBytes ( str );


byte[]轉成string:



   1: string  str  =  System.Text.Encoding.Default.GetString ( byteArray );

其它編碼方式,如System.Text.UTF8Encoding,System.Text.UnicodeEncoding。
例如:
string 類型轉成ASCII byte[]:( "01"轉成byte[] = new byte[] {0x30, 0x31} )



   1: byte [] byteArray  =  System.Text.Encoding.ASCII.GetBytes ( str );

ASCII byte[] 轉成string:(byte[] = new byte[]{ 0x30, 0x31}轉成"01")



   1: string  str  =  System.Text.Encoding.ASCII.GetString ( byteArray );

byte[] 轉成原16進制格式的string,例如0xae00cf,轉換成"ae00cf";new byte[]{ 0x30, 0x31}轉成"3031":



   1: public static string ToHexString ( byte[] bytes ) // 0xae00cf => "AE00CF "
   2: {
   3:              string hexString = string.Empty;
   4:              if ( bytes != null )
   5:             {
   6:                  StringBuilder strB = new StringBuilder ();
   7:                  for ( int i = 0; i < bytes.Length; i++ )
   8:                 {
   9:                      strB.Append ( bytes[i].ToString ( "X2" ) );
  10:                 }
  11:                  hexString = strB.ToString ();
  12:             }
  13:              return hexString;
  14:   } 

16進制格式的string轉成byte[],例如, "ae00cf"轉換成0xae00cf,長度縮減一半;"3031"轉成new byte[]{ 0x30, 0x31}:



   1: public static byte[] GetBytes(string hexString, out int discarded)
   2:  {
   3:              discarded = 0;
   4:              string newString = "";
   5:              char c;
   6:              // remove all none A-F, 0-9, characters
   7:              for (int i=0; i<hexString.Length; i++)
   8:             {
   9:                  c = hexString[i];
  10:                  if (IsHexDigit(c))
  11:                      newString += c;
  12:                  else
  13:                      discarded++;
  14:             }
  15:              // if odd number of characters, discard last character
  16:              if (newString.Length % 2 != 0)
  17:             {
  18:                  discarded++;
  19:                  newString = newString.Substring(0, newString.Length-1);
  20:             }
  21:  
  22:              int byteLength = newString.Length / 2;
  23:              byte[] bytes = new byte[byteLength];
  24:              string hex;
  25:              int j = 0;
  26:              for (int i=0; i<bytes.Length; i++)
  27:             {
  28:                 hex = new String(new Char[] {newString[j], newString[j+1]});
  29:                  bytes[i] = HexToByte(hex);
  30:                  j = j+2;
  31:             }
  32:              return bytes;
  33:  }

沒有留言:

張貼留言