• 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
  • 相关阅读:
    Atom,AtomPub 和Java 转载
    使用OData协议查询Windows日志 转
    许可协议BSD GPL MPL LGPL APL转载
    Eclipse Galileo 简介
    常见证书格式和转换
    JVM简介转
    Android Native 代码开发学习笔记转载
    echarts——各个配置项详细说明总结
    Mysql 安装服务无法启动解决方案与使用的一般使用指令
    js中如何把字符串(文本)转化为对象
  • 原文地址:https://www.cnblogs.com/machine/p/2849847.html
Copyright © 2020-2023  润新知