public string ByteArrayToHexString(byte[] data)
        {
            StringBuilder sb = new StringBuilder(data.Length * 2);
            foreach (byte b in data)
                sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));//.PadRight(3, ' '));
            return sb.ToString().ToUpper();
        }        /// <summary>
        /// 十六进制字符串转换成字节型
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public byte[] HexStringToByteArray(string s)
        {
            s = s.Replace(" ", "");
            byte[] buffer = new byte[s.Length / 2];
            for (int i = 0; i < s.Length; i += 2)
                buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
            return buffer;
        }

解决方案 »

  1.   


            public string ByteArrayToHexString(byte[] data)
            {
                //也可以写成StringBuilder sb = new StringBuilder(). 由于目标字符串长度可以预测,直接在构造函数中指定长度可以提高效率
                StringBuilder sb = new StringBuilder(data.Length * 2);            foreach (byte b in data)
                {
                    //Convert.ToString(b, 16) 将 byte转换成16进制数。 如 0xaa => "aa", 0x0b => "b"
                    //PadLeft(2, '0') 对于长度小于2的字符串,左边补'0'对齐
                    //这句也可以写成sb.Append(b.ToString("x2"));
                    sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));//.PadRight(3, ' '));
                }            //StringBuilder 转换成 string,并将小写字母转换成大写。 "aa"=>"AA"
                return sb.ToString().ToUpper();
            }        /// <summary>
            /// 十六进制字符串转换成字节型
            /// </summary>
            /// <param name="s"></param>
            /// <returns></returns>
            public byte[] HexStringToByteArray(string s)
            {
                // 去掉空格
                s = s.Replace(" ", "");            //目标byte数组的长度是字符串长度的一半,因为2个字符描述一个byte
                byte[] buffer = new byte[s.Length / 2];            for (int i = 0; i < s.Length; i += 2)
                {
                    //s.Substring(i, 2),取s中i位置开始的2个字符长的子串
                    //Convert.ToByte(..., 16).按16进制转换成byte。
                    buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
                }
                return buffer;
            }