C#hex到ascii

我正在尝试将hex的字符串转换为ASCII,使用:

public void ConvertHex(String hexString) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < hexString.Length; i += 2) { String hs = hexString.Substring(i, i + 2); System.Convert.ToChar(System.Convert.ToUInt32(hexString.Substring(0, 2), 16)).ToString(); } String ascii = sb.ToString(); MessageBox.Show(ascii); } 

但我得到一个out或boundsexception,我确定它是一个明显的错误,但我尝试过的其他代码也不起作用。 我究竟做错了什么?

此代码将hex字符串转换为ASCII,您可以将其复制粘贴到一个类中,并在不进行实例化的情况下使用它

 public static string ConvertHex(String hexString) { try { string ascii = string.Empty; for (int i = 0; i < hexString.Length; i += 2) { String hs = string.Empty; hs = hexString.Substring(i,2); uint decval = System.Convert.ToUInt32(hs, 16); char character = System.Convert.ToChar(decval); ascii += character; } return ascii; } catch (Exception ex) { Console.WriteLine(ex.Message); } return string.Empty; } 

这里有三个问题:

  1. 由于您在每次迭代时将i递增2,因此需要以hexString.Length - 1结束。 这实际上并不重要; 在最后一次迭代之后递增2将使计数器高于检查长度而不管。
  2. 你从hexString获取了错误的字符hexString
  3. hs从未使用过。
  4. 你没有附加任何东西给sb

试试这个:

 for (int i = 0; i < hexString.Length; i += 2) { string hs = hexString.Substring(i, 2); sb.Append(Convert.ToChar(Convert.ToUInt32(hs, 16))); } 

请注意,不需要使用其命名空间System来限定类型(假设您已using语句在文件顶部引用它)。

 String hs = hexString.Substring(i, i + 2); System.Convert.ToChar(System.Convert.ToUInt32(hexString.Substring(0, 2), 16)).ToString(); 

你注意到你从来没有使用过hs吗?

你是不是一遍又一遍地转换前2个字符?

由于您将索引递增2,因此需要在字符串长度的前端停止循环。 否则,循环的最后一次迭代将尝试读取字符串末尾的字符。

 for (int i = 0; i < hexString.Length - 1, i += 2)