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
  • 相关阅读:
    Windows SDK编程(Delphi版) 之 应用基础,楔子
    一个小问题引发的论证思考
    Delphi 组件开发教程指南(7)继续模拟动画显示控件
    用PyInstaller将python转成可执行文件exe笔记
    使用 .Net Memory Profiler 诊断 .NET 应用内存泄漏(方法与实践)
    Microsof Office SharePoint 2007 工作流开发环境搭建
    How to monitor Web server performance by using counter logs in System Monitor in IIS
    LINQ之Order By
    window 性能监视器
    内存泄露检测工具
  • 原文地址:https://www.cnblogs.com/machine/p/2849847.html
Copyright © 2011-2022 走看看