zoukankan      html  css  js  c++  java
  • 转(string和byte[]的转换 (C#)

    string类型转成byte[]

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

    反过来,byte[]转成string

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


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

    string类型转成ASCII byte[]:("01" 转成 byte[] = new byte[]{ 0x30, 0x31}

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

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

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

     

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

    byte[] 转成原16进制格式的string,例如0xae00cf, 转换成 "ae00cf"new byte[]{ 0x30, 0x31}转成"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[]{ 0x30, 0x31}:

            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;
            }
    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;
    }
     private int HexToByte(string hex)
            {
               int result;
                result = 0;
           
                switch (hex[0])
                {
                    case '0': result = 0x00; break;
                    case '1': result = 0x10; break;
                    case '2': result = 0x20; break;
                    case '3': result = 0x30; break;
                    case '4': result = 0x40; break;
                    case '5': result = 0x50; break;
                    case '6': result = 0x60; break;
                    case '7': result = 0x70; break;
                    case '8': result = 0x80; break;
                    case '9': result = 0x90; break;
                    case 'a':
                    case 'A': result = 0xa0; break;
                    case 'b':
                    case 'B': result = 0xb0; break;
                    case 'c':
                    case 'C': result = 0xc0; break;
                    case 'd':
                    case 'D': result = 0xd0; break;
                    case 'e':
                    case 'E': result = 0xe0; break;
                    case 'f':
                    case 'F': result = 0xf0; break;

                }
                switch (hex[1])
                {
                    case '0': result +=0x00; break;
                    case '1': result += 0x01; break;
                    case '2': result += 0x02; break;
                    case '3': result += 0x03; break;
                    case '4': result += 0x04; break;
                    case '5': result += 0x05; break;
                    case '6': result += 0x06; break;
                    case '7': result += 0x07; break;
                    case '8': result += 0x08; break;
                    case '9': result += 0x09; break;
                    case 'a':
                    case 'A': result += 0x0a; break;
                    case 'b':
                    case 'B': result += 0x0b; break;
                    case 'c':
                    case 'C': result += 0x0c; break;
                    case 'd':
                    case 'D': result += 0x0d; break;
                    case 'e':
                    case 'E': result += 0x0e; break;
                    case 'f':
                    case 'F': result += 0x0f; break;

                }

                return result;
            }
  • 相关阅读:
    iOS开发官方文档汇总
    Hadoop安装配置手册
    访问.Net程序集、COM和WMI
    UML用例图教程详解
    JIRA的详细安装和破解
    [转]编程经典好书分类
    走向资深架构师的旅程
    12款响应式 Lightbox(灯箱)效果插件
    ASP.NET MVC应用程序的安全性介绍总括
    MapReduce篇之InputFormat
  • 原文地址:https://www.cnblogs.com/seacode/p/1557501.html
Copyright © 2011-2022 走看看