作者:cy757
转自:http://blog.csdn.net/cy757/article/details/4473966
在串口通讯过程中,经常要用到 16进制与字符串、字节数组之间的转换
http://blog.csdn.net/feishanm/archive/2008/10/20/3112716.aspx
字符串转16进制字节数组
- 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;
- }
字节数组转16进制字符串
- 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;
- }
从汉字转换到16进制
- 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();
- }
从16进制转换成汉字
- 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);
- }