C# 16进制与字符串、字节数组之间的转换
在串口通讯过程中,经常要用到 16进制与字符串、字节数组之间的转换
字符串转16进制字节数组
1 private static byte[] strToToHexByte(string hexString)
2 {
3 hexString = hexString.Replace(" ", "");
4 if ((hexString.Length % 2) != 0)
5 hexString += " ";
6 byte[] returnBytes = new byte[hexString.Length / 2];
7 for (int i = 0; i < returnBytes.Length; i++)
8 returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
9 return returnBytes;
10 }
2 {
3 hexString = hexString.Replace(" ", "");
4 if ((hexString.Length % 2) != 0)
5 hexString += " ";
6 byte[] returnBytes = new byte[hexString.Length / 2];
7 for (int i = 0; i < returnBytes.Length; i++)
8 returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
9 return returnBytes;
10 }
字节数组转16进制字符串
1 public static string byteToHexStr(byte[] bytes)
2 {
3 string returnStr = "";
4 if (bytes != null)
5 {
6 for (int i = 0; i < bytes.Length; i++)
7 {
8 returnStr += bytes[i].ToString("X2");
9 }
10 }
11 return returnStr;
12 }
2 {
3 string returnStr = "";
4 if (bytes != null)
5 {
6 for (int i = 0; i < bytes.Length; i++)
7 {
8 returnStr += bytes[i].ToString("X2");
9 }
10 }
11 return returnStr;
12 }
从16进制转换成汉字
1 public static string UnHex(string hex, string charset)
2 {
3 if (hex == null)
4 throw new ArgumentNullException("hex");
5 hex = hex.Replace(",", "");
6 hex = hex.Replace("/n", "");
7 hex = hex.Replace("//", "");
8 hex = hex.Replace(" ", "");
9 if (hex.Length % 2 != 0)
10 {
11 hex += "20";//空格
12 }
13 // 需要将 hex 转换成 byte 数组。
14 byte[] bytes = new byte[hex.Length / 2];
15
16 for (int i = 0; i < bytes.Length; i++)
17 {
18 try
19 {
20 // 每两个字符是一个 byte。
21 bytes[i] = byte.Parse(hex.Substring(i * 2, 2),
22 System.Globalization.NumberStyles.HexNumber);
23 }
24 catch
25 {
26 // Rethrow an exception with custom message.
27 throw new ArgumentException("hex is not a valid hex number!", "hex");
28 }
29 }
30 System.Text.Encoding chs = System.Text.Encoding.GetEncoding(charset);
31 return chs.GetString(bytes);
32 }
2 {
3 if (hex == null)
4 throw new ArgumentNullException("hex");
5 hex = hex.Replace(",", "");
6 hex = hex.Replace("/n", "");
7 hex = hex.Replace("//", "");
8 hex = hex.Replace(" ", "");
9 if (hex.Length % 2 != 0)
10 {
11 hex += "20";//空格
12 }
13 // 需要将 hex 转换成 byte 数组。
14 byte[] bytes = new byte[hex.Length / 2];
15
16 for (int i = 0; i < bytes.Length; i++)
17 {
18 try
19 {
20 // 每两个字符是一个 byte。
21 bytes[i] = byte.Parse(hex.Substring(i * 2, 2),
22 System.Globalization.NumberStyles.HexNumber);
23 }
24 catch
25 {
26 // Rethrow an exception with custom message.
27 throw new ArgumentException("hex is not a valid hex number!", "hex");
28 }
29 }
30 System.Text.Encoding chs = System.Text.Encoding.GetEncoding(charset);
31 return chs.GetString(bytes);
32 }
从汉字转换到16进制
1 public static string ToHex(string s, string charset, bool fenge)
2 {
3 if ((s.Length % 2) != 0)
4 {
5 s += " ";//空格
6 //throw new ArgumentException("s is not valid chinese string!");
7 }
8 System.Text.Encoding chs = System.Text.Encoding.GetEncoding(charset);
9 byte[] bytes = chs.GetBytes(s);
10 string str = "";
11 for (int i = 0; i < bytes.Length; i++)
12 {
13 str += string.Format("{0:X}", bytes[i]);
14 if (fenge && (i != bytes.Length - 1))
15 {
16 str += string.Format("{0}", ",");
17 }
18 }
19 return str.ToLower();
20 }
2 {
3 if ((s.Length % 2) != 0)
4 {
5 s += " ";//空格
6 //throw new ArgumentException("s is not valid chinese string!");
7 }
8 System.Text.Encoding chs = System.Text.Encoding.GetEncoding(charset);
9 byte[] bytes = chs.GetBytes(s);
10 string str = "";
11 for (int i = 0; i < bytes.Length; i++)
12 {
13 str += string.Format("{0:X}", bytes[i]);
14 if (fenge && (i != bytes.Length - 1))
15 {
16 str += string.Format("{0}", ",");
17 }
18 }
19 return str.ToLower();
20 }