バイト配列と文字列(文字配列)の変換操作


1、デフォルトの符号化方式の変換:
(1)string(char[])byte[]への変換
byte[] byteArr = System.Text.Encoding.Default.GetBytes(char[]);
byte[] byteArr = System.Text.Encoding.Default.GetBytes(string);
byte[] byteArr = System.Text.Encoding.Default.GetBytes(char[], startindex, count);
int count = System.Text.Encoding.Default.GetBytes(char * , count, byte*, startindex);
int count = System.Text.Encoding.Default.GetBytes(char[] , startindex, count, byte[], startindex);
int count = System.Text.Encoding.Default.GetBytes(s , startindex, count, byte[], startindex);

(2)byte[]をstring(char[]に変換)
string str = System.Text.Encoding.Default.GetString ( byteArray );
string str = System.Text.Encoding.Default.GetString ( byteArray, startindex, count );
GetStringメソッドはGetCharメソッドと同様であり、後者はバイト配列を対応する文字配列に変換する.
2、その他の符号化方式の変換
上記のDefaultをASCII、Unicode、UTF 8、UTF 7、UTF 32などの符号化方式に変更し、対応方法を呼び出せば変換できます.
string str = "01";
byte[] byteArr = System.Text.Encoding.ASCI.GetBytes(str);
上記コードはbyteArr={0 x 30,0 x 31}を得、これが0と1のASCI符号化値である.
byte[] byteArr = new byte[]{0x4e, 0x01};
string a = System.Text.Encoding.BigEndianUnicode.GetString(byteArr);
上記コードは、unicode符号化の2番目の漢字「丁」復号を変数aに付与し、「丁」のunicode符号はu 4 e 01である.
3、Byte[]の16進数を16進数文字列に変換
public static string ToHexString ( byte[] bytes ) 
{  
    string hexString = string.Empty;  
    if ( bytes != null )  
    {  
        StringBuilder strB = new StringBuilder ();  
 
        for ( int i = 0; i < bytes.Length; i++ )  
        {  
            strB.Append ( bytes[i].ToString ( "X2" ) );  
        }  
        hexString = strB.ToString ();  
    }  
    return hexString;  
}  

4、16進数文字列をByte配列に変換
public static byte[] GetBytes(string hexString, out int discarded)  
{  
    discarded = 0;  
    string newString = "";  
    char c;  
    // remove all none A-F, 0-9, characters  
    for (int i=0; i<hexstring.length; i++) 
   {  
        c = hexString[i];  
        if (IsHexDigit(c))  
            newString += c;  
        else 
            discarded++;  
    }  
    // if odd number of characters, discard last character  
    if (newString.Length % 2 != 0)  
    {  
        discarded++;  
        newString = newString.Substring(0, newString.Length-1);  
    }  
 
    int byteLength = newString.Length / 2;  
    byte[] bytes = new byte[byteLength];  
    string hex;  
    int j = 0;  
    for (int i=0; i<bytes.length; i++) 
   {  
        hex = new String(new Char[] {newString[j], newString[j+1]});  
        bytes[i] = HexToByte(hex);  
        j = j+2;  
    }  
    return bytes;  
}  
unicode符号化を使用して取得されたウェブページまたは他のファイルについては、上記の方法を使用して暗号化されたunicode符号化文字列をbyte配列に変換し、前述した変換方法を使用して対応する文字に変換することができる.