zoukankan      html  css  js  c++  java
  • csharp中byte于string转换

    csharp中byte于string转换

    csharp中byte于string转换

    1 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.UTF8Encoding,System.Text.UnicodeEncoding等;例如: 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;
    }
    

    2 Encoding.ASCII与Encoding.Unicode

    用Encoding.Unicode.GetBytes()转换字节数组是两个字节表示一个字符,比如:

    byte[] bytes = Encoding.Unicode.GetBytes("ab");
    // bytes = [0x61, 0x00, 0x62, 0x00];
    // 用bytes转换成string,也要用Encoding.Unicode
    string str = Encoding.Unicode.GetString(bytes);
    // str = "ab";
    

    如果用Encoding.Unicode.GetBytes()转换的字节数组,用Encoding.Acsii转换成字符 串,转换结果是错误的,必须Encoding.Convert进行编码转换。

    byte[] bytes = Encoding.Unicode.GetBytes("ab");
    // bytes = [0x61, 0x00, 0x62, 0x00];
    // 用bytes转换成string,用Encoding.ASCII
    string str = Encoding.ASCII.GetString(bytes);  
    // str = "a\0b\0"
    // 编码转换
    byte[] asciiBytes = Encoding.Convert(Encoding.Unicode, Encoding.ASCII, bytes);  
    // asciiBytes = [0x61, 0x62];
    // 用asciiBytes转换成string,用Encoding.ASCII
    string str1 = Encoding.ASCII.GetString(bytes);    
    // str1 = "ab"
    

    Date: 2013-02-16 11:04:52 CST

    Author: machine of awareness

    Org version 7.8.06 with Emacs version 23

    Validate XHTML 1.0
  • 相关阅读:
    bzoj1037: [ZJOI2008]生日聚会Party(DP)
    bzoj1034: [ZJOI2008]泡泡堂BNB(贪心)
    bzoj1025: [SCOI2009]游戏(数学 + 思维 + DP)
    第十章、嵌入式Linux的调试技术 读书笔记
    第九章、硬件抽象层:HAL 读书笔记
    第八章 让开发板发出声音:蜂鸣器驱动
    ANDROID深度探索(卷1)HAL与驱动开发 第七章
    ANDROID深度探索(卷1)HAL与驱动开发 第六章
    ANDROID深度探索(卷1)HAL与驱动开发 第五章
    ANDROID深度探索(卷1)HAL与驱动开发 第四章
  • 原文地址:https://www.cnblogs.com/machine/p/2849847.html
Copyright © 2011-2022 走看看