TCP/IP通信或串口通信数据类型转换

来源:互联网 发布:show java 3.0汉化版 编辑:程序博客网 时间:2024/06/03 15:36
        /// <summary>        /// string转换为byte[]数组        /// </summary>        /// <param name="str"></param>        /// <returns></returns>        public static byte[] GetBytes(string str)        {            byte[] bytes = new byte[str.Length * sizeof(char)];            System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);            return bytes;        }        /// <summary>        /// byte[]数组转换为strng        /// </summary>        /// <param name="bytes"></param>        /// <returns></returns>        public static string GetString(byte[] bytes)        {            char[] chars = new char[bytes.Length / sizeof(char)];            System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);            return new string(chars);        }        /// <summary>        /// 字节数组转16进制字符串        /// </summary>        /// <param name="bytes"></param>        /// <returns></returns>        public static string byteToHexStr(byte[] bytes)        {            string returnStr = "";            if (bytes != null)            {                for (int i = 0; i < bytes.Length; i++)                {                    returnStr += bytes[i].ToString("X2");                }            }            return returnStr;        }        /// <summary>        /// byte转换为string        /// </summary>        /// <param name="bytes"></param>        /// <param name="len"></param>        /// <returns></returns>        public static string ToHexString(byte[] bytes, int len)        {            return ToHexString(bytes, 0, len);        }        public static string ToHexString(byte[] bytes, int start, int len)        {            string strReturn = "";            for (int i = start; i < (start + len); i++)            {                byte bt = bytes[i];                strReturn += bt.ToString("x2");            }            return strReturn;        }        /// <summary>        /// 16进制转ASCII        /// </summary>        /// <param name="Msg"></param>        /// <returns></returns>        public static string HexToASCII(string Msg)        {            byte[] buff = new byte[Msg.Length / 2];            string Message = "";            for (int i = 0; i < buff.Length; i++)            {                buff[i] = byte.Parse(Msg.Substring(i * 2, 2),                   System.Globalization.NumberStyles.HexNumber);            }            System.Text.Encoding chs = System.Text.Encoding.ASCII;            Message = chs.GetString(buff);            return Message;        }        /// <summary>        /// 字符串转16进制字节数组        /// </summary>        /// <param name="hexString"></param>        /// <returns></returns>        private static byte[] strToToHexByte(string hexString)        {            hexString = hexString.Replace(" ", "");            if ((hexString.Length % 2) != 0)                hexString += " ";            byte[] returnBytes = new byte[hexString.Length / 2];            for (int i = 0; i < returnBytes.Length; i++)                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);            return returnBytes;        }        /// <summary>        /// 16进制转换为byte[]        /// </summary>        /// <param name="hexStr"></param>        /// <returns></returns>        public static byte[] ToByesByHex(string hexStr)        {            int len = hexStr.Length;            byte[] data = new byte[len / 2];            for (int k = 0; k < data.Length; k++)            {                data[k] = Convert.ToByte(hexStr.Substring(k * 2, 2), 16);                //k = k* 2;            }            return data;        }        /// <summary>        /// 从汉字转换到16进制        /// </summary>        /// <param name="s"></param>        /// <param name="charset">编码,如"utf-8","gb2312"</param>        /// <param name="fenge">是否每字符用逗号分隔</param>        /// <returns></returns>        public static string ToHex(string s, string charset, bool fenge)        {            if ((s.Length % 2) != 0)            {                s += " ";//空格                         //throw new ArgumentException("s is not valid chinese string!");            }            System.Text.Encoding chs = System.Text.Encoding.GetEncoding(charset);            byte[] bytes = chs.GetBytes(s);            string str = "";            for (int i = 0; i < bytes.Length; i++)            {                str += string.Format("{0:X}", bytes[i]);                if (fenge && (i != bytes.Length - 1))                {                    str += string.Format("{0}", ",");                }            }            return str.ToLower();        }                ///<summary>        /// 从16进制转换成汉字        /// </summary>        /// <param name="hex"></param>        /// <param name="charset">编码,如"utf-8","gb2312"</param>        /// <returns></returns>        public static string UnHex(string hex, string charset)        {            if (hex == null)                throw new ArgumentNullException("hex");            hex = hex.Replace(",", "");            hex = hex.Replace("\n", "");            hex = hex.Replace("\\", "");            hex = hex.Replace(" ", "");            if (hex.Length % 2 != 0)            {                hex += "20";//空格            }            // 需要将 hex 转换成 byte 数组。             byte[] bytes = new byte[hex.Length / 2];            for (int i = 0; i < bytes.Length; i++)            {                try                {                    // 每两个字符是一个 byte。                     bytes[i] = byte.Parse(hex.Substring(i * 2, 2),                    System.Globalization.NumberStyles.HexNumber);                }                catch                {                    // Rethrow an exception with custom message.                     throw new ArgumentException("hex is not a valid hex number!", "hex");                }            }            System.Text.Encoding chs = System.Text.Encoding.GetEncoding(charset);            return chs.GetString(bytes);        }        /// <summary>        /// Unicode转汉字        /// </summary>        /// <param name="text"></param>        /// <returns></returns>        public static string UnicodeToGB(string text)        {            System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(text, "\\\\u([\\w]{4})");            if (mc != null && mc.Count > 0)            {                foreach (System.Text.RegularExpressions.Match m2 in mc)                {                    string v = m2.Value;                    string word = v.Substring(2);                    byte[] codes = new byte[2];                    int code = Convert.ToInt32(word.Substring(0, 2), 16);                    int code2 = Convert.ToInt32(word.Substring(2), 16);                    codes[0] = (byte)code2;                    codes[1] = (byte)code;                    text = text.Replace(v, Encoding.Unicode.GetString(codes));                }            }            else            {            }            return text;        }        public static string unicodetogbx(string text)        {            System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(text, "\\\\u([\\w]{4})");            string a = text.Replace("\\u", "");            char[] arr = new char[mc.Count];            for (int i = 0; i < arr.Length; i++)            {                arr[i] = (char)Convert.ToInt32(a.Substring(i * 4, 4), 16);            }            string c = new string(arr);            return c;        }        /// <summary>        /// Unicode转汉字(测试通过)        /// </summary>        /// <param name="text"></param>        /// <returns></returns>        public static string UnicodeToCn(string text)        {            string cd = text;            string cd2 = cd.Replace(" ", "");            cd2 = cd2.Replace("\r", "");            cd2 = cd2.Replace("\n", "");            cd2 = cd2.Replace("\r\n", "");            cd2 = cd2.Replace("\t", "");            if (cd2.Length % 4 != 0)            {                //MessageBox.Show("Unicode编码为双字节,请删多或补少!确保是二的倍数。");                return "";            }            else            {                int len = cd2.Length / 2;                byte[] b = new byte[len];                for (int i = 0; i < cd2.Length; i += 2)                {                    string bi = cd2.Substring(i, 2);                    b[i / 2] = (byte)Convert.ToInt32(bi, 16);                }                string o = Encoding.Unicode.GetString(b);                //textBox2.Text = o;                return o;            }        }        /// <summary>          /// 字符串转为UniCode码字符串          /// </summary>          /// <param name="s"></param>          /// <returns></returns>          public static string StringToUnicode(string s)        {            char[] charbuffers = s.ToCharArray();            byte[] buffer;            StringBuilder sb = new StringBuilder();            for (int i = 0; i < charbuffers.Length; i++)            {                buffer = System.Text.Encoding.Unicode.GetBytes(charbuffers[i].ToString());                sb.Append(String.Format("//u{0:X2}{1:X2}", buffer[1], buffer[0]));            }            return sb.ToString();        }        /// <summary>          /// Unicode字符串转为正常字符串          /// </summary>          /// <param name="srcText"></param>          /// <returns></returns>          public static string UnicodeToString(string srcText)        {            string dst = "";            string src = srcText;            int len = srcText.Length / 6;            for (int i = 0; i <= len - 1; i++)            {                string str = "";                str = src.Substring(0, 6).Substring(2);                src = src.Substring(6);                byte[] bytes = new byte[2];                bytes[1] = byte.Parse(int.Parse(str.Substring(0, 2), NumberStyles.HexNumber).ToString());                bytes[0] = byte.Parse(int.Parse(str.Substring(2, 2), NumberStyles.HexNumber).ToString());                dst += Encoding.Unicode.GetString(bytes);            }            return dst;        }

0 0