CQ-CSER

计算机爱好者

string和byte[]的相互(C#)

Posted on | 四月 25, 2010 | 1 Comment

string类型转成byte[]

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

反过来,byte[]转成string

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

其它编码方式的,如System.Text.UTF8Encoding,System.Text.UnicodeEncoding class等;例如:

string类型转成ASCII byte[]:(”01″ 转成 byte[] = new byte[]{ 0×30, 0×31})

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

ASCII byte[] 转成string:(byte[] = new byte[]{ 0×30, 0×31} 转成 “01″

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

有时候还有这样一些需求:

byte[] 转成原16进制格式的string,例如0xae00cf, 转换成 “ae00cf”;new byte[]{ 0×30, 0×31}转成”3031″:

   public static string ToHexString(byte[] bytes) // 0xae00cf => “AE00CF ”
        {
            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;
        }

反过来,16进制格式的string 转成byte[],例如, “ae00cf”转换成0xae00cf,长度缩减一半;“3031″ 转成new byte[]{ 0×30, 0×31}:

private static byte[] HexToByte(string hexString)
        {
            byte[] returnBytes = new byte[hexString.Length / 2];
            for (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }

—————————————————–邪恶的分割线————————————————————

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;
        }

相关文章:

  1. DES加密解密函数 收藏 c#
  2. 随笔-MD5悲剧-c#
  3. ASP.NET加密Cookies
  4. app.config-c#读写类
  5. C# java php的RSA

评论|Comments

One Response to “string和byte[]的相互(C#)”

  1. yootion
    四月 26th, 2010 @ 13:40

    突然在网上看到,过来看看
    http://www.zhuliangliang.org

留言|Leave a Reply





  • Archives

  • SUNSHINE

  • About

    本博客采用创作共用版权协议,要求署名、非商业用途和保持一致. 转载本博客内容也遵循“署名-非商业用途-保持一致”的创作共用协议.

    订阅

    Search

    Admin