用C#实现十六进制字符串转换为ASCII

最近做串口通信,要用到十六进制批量转ASCII。网上找了半天C#的代码,

只有单个转换的的,没找到自己需要的代码。只好自己写一个了。

代码如下:

   

       //触发事件

        private void button1_Click(object sender,EventArgs e)

      {

            textBox2.Text= HexStringToASCII(textBox1.Text);

      }


        /// <summary>
        /// 将一条十六进制字符串转换为ASCII
        /// </summary>
        /// <param name="hexstring">一条十六进制字符串</param>
        /// <returns>返回一条ASCII码</returns>
        public static string HexStringToASCII(string hexstring)
        {
            byte[] bt = HexStringToBinary(hexstring);
            string lin = "";
            for (int i = 0; i < bt.Length; i++)
            {
                lin = lin + bt[i] + " ";
            }


            string[] ss = lin.Trim().Split(new char[] { ' ' });
            char[] c = new char[ss.Length];
            int a;
            for (int i = 0; i < c.Length; i++)
            {
                a = Convert.ToInt32(ss[i]);
                c[i] = Convert.ToChar(a);
            }

            string b = new string(c);
            return b;
        }


        /**/
        /// <summary>
        /// 16进制字符串转换为二进制数组
        /// </summary>
        /// <param name="hexstring">用空格切割字符串</param>
        /// <returns>返回一个二进制字符串</returns>
        public static byte[] HexStringToBinary(string hexstring)
        {

            string[] tmpary = hexstring.Trim().Split(' ');
            byte[] buff = new byte[tmpary.Length];
            for (int i = 0; i < buff.Length; i++)
            {
                buff[i] = Convert.ToByte(tmpary[i], 16);
            }
            return buff;
        }

 比如输入:41 42 25

得到结果:AB%

总结:关于十六进制字符串转ASCII码,正常的话,几句代码就搞定。虽然并不复杂,但是其实代码还是挺多的,就是因为多了批量两个字。希望能帮到大家,也欢迎提出宝贵意见,以更优化代码。


 

原文地址:https://www.cnblogs.com/Serialport/p/3114334.html