zoukankan      html  css  js  c++  java
  • 字符串16进制之间相互转换(转载)

    1、将普通的字符串。

    点击进入推荐链接

    复制代码
    class Program
    {
        static void Main(string[] args)
        {
            string str = "Hello,C#!!!";
            //调用。
            string result = StringToHex16String(str);
            Console.WriteLine(string.Format("将普通字符串:{0}转换成16进制字符串是:{1}", str, result));
            Console.ReadKey();
        }    
        /// <summary>
        /// 此方法用于将普通字符串转换成16进制的字符串。
        /// </summary>
        /// <param name="_str">要转换的字符串。</param>
        /// <returns></returns>
        public static string StringToHex16String(string _str)
        {
            //将字符串转换成字节数组。
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(_str);
            //定义一个string类型的变量,用于存储转换后的值。
            string result = string.Empty;
            for (int i = 0; i < buffer.Length; i++)
            {
                //将每一个字节数组转换成16进制的字符串,以空格相隔开。
                result += Convert.ToString(buffer[i], 16) + " ";
            }
            return result;
        }
    }
    复制代码

    转换结果是:

    2、将16进制的字符串转换成普通字符串。

    复制代码
    class Program
    {
        static void Main(string[] args)
        {
            string hex16String = "48 65 6c 6c 6f 2c 43 23 21 21 21";
            string result = Hex16StringToString(hex16String);
            Console.WriteLine("将16进制字符串:{0}转换成普通字符串是:{1}", hex16String, result);
            Console.ReadKey();
        }
    
        /// <summary>
        /// 此方法用于将16进制的字符串转换成普通字符串。
        /// </summary>
        /// <param name="_hex16String">要转换的16进制的字符串。</param>
        /// <returns></returns>
        private static string Hex16StringToString(string _hex16String)
        {
            string result = string.Empty;
            //以空格分割字符串。
            string[] chars = _hex16String.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            //声明一个字节数组,其长度等于分割的字符串的长度。
            byte[] buffer = new byte[chars.Length];
            for (int i = 0; i < buffer.Length; i++)
            {
                //将chars数组中的元素转换成字节数组。
                buffer[i] = Convert.ToByte(chars[i], 16);
            }
            //将字节数组转换成字符串。
            result = System.Text.Encoding.UTF8.GetString(buffer);
            //返回。
            return result;
        }
    }
    复制代码

     效果图:

    3、将16进制的字符串转换成16进制的字节数组。

    复制代码
    class Program
    {
        static void Main(string[] args)
        {
            string hex16String = "48 65 6c 6c 6f 2c 43 23 21 21 21";
            //引用。
            byte[] bytes = Hex16StringToHex16Byte(hex16String);
        }
    
        /// <summary>
        /// 此方法用于将16进制的字符串转换成16进制的字节数组
        /// </summary>
        /// <param name="_hex16ToString">要转换的16进制的字符串。</param>
        public static byte[] Hex16StringToHex16Byte(string _hex16String)
        {
            //去掉字符串中的空格。
            _hex16String = _hex16String.Replace(" ", "");
            if (_hex16String.Length / 2 == 0)
            {
                _hex16String += " ";
            }
            //声明一个字节数组,其长度等于字符串长度的一半。
            byte[] buffer = new byte[_hex16String.Length / 2];
            for (int i = 0; i < buffer.Length; i++)
            {
                //为字节数组的元素赋值。
                buffer[i] = Convert.ToByte((_hex16String.Substring(i * 2, 2)), 16);
            }
            //返回字节数组。
            return buffer;
        }
    }
    复制代码

    效果图:

     4、将16进制的字节数组转换成16进制的字符串。

    复制代码
    class Program
    {
        static void Main(string[] args)
        {
            string hex16String = "48 65 6c 6c 6f 2c 43 23 21 21 21";
            byte[] bytes = Hex16StringToHex16Byte(hex16String);
            string result = Hex16ByteToHex16String(bytes);
            Console.WriteLine(string.Format("转换成16进制的字符串是:{0}", result));
            Console.ReadKey();
        }
    
        /// <summary>
        /// 此方法用于将16进制的字节数组转换成16进制的字符串。
        /// </summary>
        /// <param name="_hex16Byte">要转换的16进制的字节数组。</param>
        /// <returns></returns>
        public static string Hex16ByteToHex16String(byte[] _hex16Byte)
        {
            string result = string.Empty;
            //如果字节数组不为空。
            if (_hex16Byte != null)
            {
                for (int i = 0; i < _hex16Byte.Length; i++)
                {
                    //将每一个字节数组转换成16进制string类型的字符串,用空格分隔开。
                    result += _hex16Byte[i].ToString("X2") + " ";
                }
            }
            return result;
        }
    }
    复制代码

    效果图:

     

    5、将字符串转换成16进制。

    复制代码
    class Program
    {
        static void Main(string[] args)
        {
            string str = "自由!!!";
            string result = StringTo16Hex(str, Encoding.UTF8, true);
            Console.WriteLine(string.Format("将字符串:{0}转换成16进制后是:{1}", str, result));
            Console.ReadKey();
        }
    
        /// <summary>
        /// 此方法用于将字符串转化成16进制。
        /// <param name="_str">要转换的字符串。</param>
        /// <param name="_encode">编码格式(UTF-8、gb2312)</param>
        /// <param name="_isHaveSpace">是否用空格分隔</param>
        // <returns></returns>
        public static string StringTo16Hex(string _str, Encoding _encode,bool _isHaveSpace)
        {
            string result = string.Empty;
            if (_str.Length / 2 != 0)
            {
                _str += " ";
            }
            //将字符串转换成字节数组。
            byte[] buffer = _encode.GetBytes(_str);
            for (int i = 0; i < buffer.Length; i++)
            {
                result += string.Format("{0:X}", buffer[i]);
                if (_isHaveSpace && (i != buffer.Length - 1))
                {
                    //result += " ";
                    //或者写成以下这种。
                    result += string.Format("{0}", " ");
                }
            }
            return result;
        }
    }
    复制代码

    效果图:

    6、将16进制转换成字符串。

    复制代码
    class Program
    {
        static void Main(string[] args)
        {
            string str = "自由!!!";
            string result = StringTo16Hex(str, Encoding.UTF8, true);
            Console.WriteLine();
            Console.WriteLine(string.Format("将字符串:{0}转换成16进制后是:{1}", str, result));
            Console.WriteLine("---------------------------------");
            string result2 = Hex16ToString(result,Encoding.UTF8);
            Console.WriteLine(string.Format("将16进制:{0} 转换成字符串是:{1}", result, result2));
            Console.ReadKey();
        }
    
        /// <summary>
        /// 此方法用于将16进制转换成字符串。
        /// </summary>
        /// <param name="_str">要转换的16进制。</param>
        /// <param name="_encode">编码的格式。</param>
        /// <returns></returns>
        public static string Hex16ToString(string _str, Encoding _encode)
        {
            if (_str == null)
            {
                return "";
            }
            //去掉空格、逗号、斜杠
            _str = _str.Replace(",", "");
            _str = _str.Replace("
    ", "");
            _str = _str.Replace("\", "");
            _str = _str.Replace(" ", "");
            if (_str.Length % 2 == 0)
            {
                _str += "20"; //空格
            }
            //新建字节数组。
            byte[] buffer = new byte[_str.Length / 2];
            for (int i = 0; i < buffer.Length; i++)
            {
                try
                {
                    //每两个字符是一个 byte。   
                    buffer[i] = byte.Parse(_str.Substring(i * 2, 2),
                    System.Globalization.NumberStyles.HexNumber);
                }
                catch (Exception ex)
                {
                    //错误异常处理。
                    throw ex; 
                }               
            }
            //返回
            return _encode.GetString(buffer, 0, buffer.Length);
        }
    }
    复制代码

    效果图:

  • 相关阅读:
    业务层和数据层
    Android开发学习总结——Android开发的一些相关概念(转)
    Android开发学习总结(五)——Android应用目录结构分析(转)
    Android开发学习总结(六)—— APK反编译(转)
    微信开发学习总结(一)——微信开发环境搭建(转)
    PowerMockito使用详解(转)
    java堆栈 (转)
    windows 7 SDK和DDK下载地址
    Linux pipe函数
    火星人的数学观(4)
  • 原文地址:https://www.cnblogs.com/shuaiheng/p/10508633.html
Copyright © 2011-2022 走看看